编译时图像问题

时间:2014-10-13 13:20:29

标签: java eclipse swing jar embedded-resource

我一直在互联网上试图找出如何在编译成可运行的jar后显示图像图标。我发现这个问题为时已晚,我在eclipse之前多次运行我的程序并且每件事都有效,现在6个月后项目完成,我用eclipse编译我的程序,没有音频或图像工作。在网上阅读,它说有关图像文件夹的位置应该在jar里面,但是我的不在那里?

我玩过图片文件夹,在源文件夹中移动它,但它没有用。我觉得它可能与资源的路径有关...但这只是猜测。

我已经构建了一个具有相同结果的简单程序...在eclipse中运行时工作,但在编译时不工作。有人可以通过修改下面的代码向我展示一个例子。提前谢谢。

消息来源代码:

package ImageIcon;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Gui {

public static JLabel c;

public Gui(){
    JFrame f = new JFrame();

    JPanel p = new JPanel();
    p.setBounds(0, 0, 120, 200);
    p.setBackground(Color.black);
    p.setLayout(null);

    JPanel bg = new JPanel(new BorderLayout());
    bg.setBounds(50, 50, 15, 15);
    bg.setBackground(Color.white);

    ImageIcon a = new ImageIcon("images/success.jpg");
    c = new JLabel(a);

    f.setSize(100, 200);
    f.setLayout(null);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);

    f.add(p);
    p.add(bg);
    bg.add(c);
}

public static void main(String[] args) {
    new Gui();
}

}

enter image description here

2 个答案:

答案 0 :(得分:4)

使用您当前的目录设置,images目录甚至不会内置到jar中。尝试提取它,你很可能会发现它不在那里。

您可以通过文件夹中没有小包徽标这一事实来判断,如resources所示

enter image description here

类路径(/ jar)中内置的唯一默认目录是src。我们需要将resources放入src

enter image description here

或配置构建路径以包含resources中的文件。一旦我们这样做,我们将在文件夹图标中看到小包图标。这就是我们如何知道文件在构建路径上的方式

enter image description here


我们将使用的代码:

  • 第一张图片:不能,它不会工作(这是你目前的困境)

  • 第二张图片:

    ImageIcon icon = new ImageIcon(
             getClass().getResource("/resources/stackoverflow.png"));
    
  • 第三张图片:

    ImageIcon icon = new ImageIcon(
             getClass().getResource("/stackoverflow.png"));
    

要配置构建路径以使用第三个选项,请按照Example 2 in this answer

中的说明进行操作

答案 1 :(得分:2)

从截图中可以看出,图像存在于名为" images"的文件夹中。将它放在类路径中的一个文件夹中:src / images / success.jpg并调用:

ImageIcon a = new ImageIcon(getClass().getResource("/images/success.jpg"));