当前位置: 首页 > 面试题库 >

我直接从“ Java for Dummies的所有功能”中直接提取了这段代码……为什么不起作用?

顾骏祥
2023-03-14
问题内容
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


@SuppressWarnings("serial")
public class Picture extends JFrame{

    public static void main(String[] args){

        new Picture();

    }

    public Picture(){

        this.setTitle("Picture");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        ImageIcon pic = new ImageIcon("TestImage.jpg");
        p.add(new JLabel(pic));
        this.add(p);
        this.pack();
        this.setVisible(true);
        System.out.println(pic);
    }

}

这段代码仅显示折叠的框架。我希望pack(); 方法调用会确定我的.jpg图片周围的框架大小,对吗?

我已经可以听到第一个问题,是的,该图像与我的项目包文件夹位于同一文件夹中。

我正在使用Eclipse IDE。

我还添加了println(); 语句以查看Image引用返回的内容,并返回“ TestImage.jpg”。我以为它会返回内存中图像的地址。

我整个上午都在阅读该论坛,如果没有复制和使用其他人的更复杂的代码,我真的找不到任何对我有帮助的地方。我试图使这一过程尽可能简单,以免混淆自己。

在此先感谢您的帮助。


问题答案:

该图像与我的项目包文件夹位于同一文件夹中

而已。

按照编写的程序,程序将在 当前工作目录 (而不是程序包层次结构)中查找映像。

根据需要String,从构造函数的Javadoc中采用,它从指定的文件名中读取图像。但是,当您指定相对路径时,这意味着相对于应用程序运行所在的工作目录进行读取。

要变通解决此问题,您有两种选择:

  • 指定相对于IDE运行程序的工作目录的映像文件名。我相信Eclipse在项目根目录中运行应用程序,并且源包层次结构的根目录为src。在这种情况下,如果您指定,它将起作用src/TestImage.jpg。缺点是,如果曾经从其他目录运行程序,则必须将图像文件与之一起移动。这对于分发/打包很不方便,因为您不能只是删除JAR文件并使其运行。

  • 使用Java的资源加载器从包层次结构加载图像文件。为此,请先使用

    getClass().getResource("TestImage.jpg")
    

获取图像的URL(相对于包根)。看到ImageIcon有一个接受URL读取图像的构造函数。因此,您应该使用

    new ImageIcon(getClass().getResource("TestImage.jpg"))

相对于包层次结构而言,优点是可以从任何位置运行该程序,并且可以将图像与您的应用程序捆绑在一个JAR文件中。

另外:最佳实践是创建一个在其中放置代码和资源的包(而不只是将它们放在包的根目录中)。在这种情况下,请通过"com/example/someapp/TestImage.jpg"



 类似资料:
  • 通常,当我只对参数化对象进行排序时,它会完美地预成型,但是当我添加没有数据的对象时,它就会发疯。帮助。 顺便说一句,我想要按降序排序的数据,由“Stanje na racunu”排序,或者用英语“你的账户余额”排序,它接受对象类中的“stanje”变量并对其进行比较。我将再次重复。当tr1、tr2和tr3不包括在内时,这是完美的。帮助 结果如下。 所需的输出是(不是完整的,只有名称(vlasnik

  • 因此,下面的代码,从txt文件中取序列号作为参数,在我的计算机上正常工作。每个数字都写在一行上。下面是代码: 但它在CodeEval中不起作用。站点编译器是这么说的: Fontconfig错误:无法加载默认配置文件线程“main”java.awt.HeadLessException:未设置X11显示变量,但此程序执行了需要它的操作。在java.awt.GraphicsEnvironment.Che

  • 问题内容: 我知道React教程和文档毫无疑问地警告说,状态不应该直接变异,所有事情都应该通过。 我想了解一下,为什么我不能直接更改状态,然后(在同一函数中)仅调用来触发它。 例如:下面的代码似乎正常工作: 我全都遵循以下约定,但我想进一步加深对ReactJS实际工作方式的理解,以及可能出现问题的地方或上述代码的优缺点。 文档下的注释基本上标识了两个陷阱: 如果您直接更改状态,然后再调用它,则可能

  • 我有一些流处理代码,它接受一个单词流并对它们执行一些操作,然后将它们简化为一个,其中包含单词作为键,单词的出现次数作为值。为了代码的简洁性,我使用了jOOL库的类,其中包含许多有用的快捷方法。 类型中的方法不适用于参数 type未定义此处适用的 为什么的行为与有任何不同,我(也许是天真地)认为它是直接等效的,为什么编译器在使用它时不能处理它? (是的,我知道我可以通过将以前的应用程序移到操作中来删

  • 问题内容: 我正在阅读有关ConcurrentModificationException以及如何避免它的信息。找到了一篇文章。该文章中的第一个清单具有与以下相似的代码,这显然会导致异常: 然后,它继续以各种建议解释如何解决该问题。 当我尝试重现它时,我没有遇到异常! 为什么我没有得到例外? 问题答案: 根据JavaAPI文档,Iterator.hasNext不会抛出。 检查后,您从列表中删除了一个

  • 我有Paypal DoDirect方法的api(直接信用卡支付),我使用php作为基本语言。 我正在获得成功的交易或回应是这样说的。但沙箱帐户中没有更新。 我分享了我的沙盒业务-专业帐户详细信息如下: 我用我的另一个个人账户做了这笔交易。 我的期望是,它应该从个人账户扣除金额,并贷记到商户(business-pro)账户。 非常感谢任何帮助。谢谢 编辑我使用的代码与以下url中提到的相同,使用类的