我把这个代码直出的Java都在同一个傻瓜'......为什么不工作?(I took this

2019-06-26 17:59发布

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);
    }

}

此代码,因为它仅仅是显示折叠的框架。 我希望的是,包(); 方法将大小在我的.JPG图像帧,正确的电话吗?

我已经可以听到的第一个问题,是的图像是在同一文件夹作为我的项目包文件夹。

我使用的Eclipse IDE中。

我还增加了的println(); 声明看什么图片引用返回,并返回“TestImage.jpg”。 我认为这将返回在内存中的图像的地址。??

我一直在阅读论坛整个上午,我真的不能找到任何有利于我而不复制和使用别人的更复杂的代码。 我试图保持这个简单,我可以让我不要混淆自己。

在此先感谢您的帮助。

Answer 1:

该图片是在同一文件夹中我的项目包文件夹

而已。

由于写的,你的程序会在当前工作目录 ,而不是包层次的图像。

从的Javadoc构造服用String时,它从指定的文件名读取图像,作为所希望的。 但是,当您指定相对路径,这意味着读相对于该应用程序在运行的工作目录。

要解决这个问题,你有两个选择:

  • 指定相对于工作目录的图像文件名的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"代替。



Answer 2:

尝试:

ImageIcon image = new ImageIcon(getClass().getResource("TestImage.jpg"));

请参阅如何使用图标教程的详细信息,特别是加载图像使用的getResource部分。



文章来源: I took this code straight out of 'Java all in one for Dummies' …why doesn't it work?