打包包含图像的程序

我有大量的问题打包我的java程序,其中包含图像到jar转换为可执行文件。 图像已用于程序和按钮的背景中。 请参阅下图,其中显示了我希望转换为jar的程序。

图片

在此处输入图像描述

如上所示,程序运行正常。 我创建了相同的程序,没有自定义背景和自定义按钮,不包含任何图像,我成功将其打包到一个jar中,随后打包成一个.exe文件。

关于绘制我的背景,我这样做如下:

public void paintComponent(Graphics g) { Image img = new ImageIcon("imgs/Bgnd1.jpg").getImage(); Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setLayout(null); g.drawImage(img, 0, 0, null); } 

关于使用图像创建我的4个自定义按钮,我正在执行以下操作:

 // Prepare rollover images ImageIcon F1 = new ImageIcon("imgs/btn_f1_not_selected.jpg"); ImageIcon F1rollOver = new ImageIcon("imgs/btn_f1_selected.jpg"); // Create F1 button final JButton btnF1 = new JButton(F1); //btnF1.setOpaque(false); btnF1.setContentAreaFilled(false); btnF1.setBorder(null); btnF1.setBorderPainted(false); btnF1.setFocusPainted(false); btnF1.setRolloverIcon(F1rollOver); 

我尝试将图像放在bin文件夹中,并且为了创建背景,我改变了上述关于图像的声明/获取的方法。

 public void paintComponent(Graphics g) { String path = "Bgnd11.jpg"; java.net.URL imgURL = getClass().getResource(path); Image img = new ImageIcon(imgURL).getImage(); Dimension size = new Dimension(img.getWidth(observer), img.getHeight(observer)); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setLayout(null); g.drawImage(img, 0, 0, null); } 

我还尝试获取创建按钮所需的图像,如下所示,然后将它们传递给我的按钮,但这不起作用。

 String path = "Bgnd11.jpg"; java.net.URL imgURL = getClass().getResource(path); Image img = new ImageIcon(imgURL).getImage(); 

如何定位和加载图像?

在第一次尝试时,您将从当前目录中的文件系统加载图像,该目录是启动javaw命令的java的目录。 这就是阻止您将图像与应用程序捆绑在一起的原因。 显然,应用程序的最终用户不会在当前目录中拥有这些图像,并且他当前的目录将根据他启动应用程序的方式而改变。

您应该将图像打包在jar文件中,因此存在于类路径中,因此在您第二次尝试时使用ClassLoader加载它们。

假设它们位于jar的文件夹/resources/images中,因此对应于包resources.images

使用getClass().getResource("Bgnd11.jpg") ,如javadoc所示,尝试在与getClass()返回的类相同的包中找到Bgnd11.jpg 。 因此,如果类在包resources.images ,它将在我们的示例中工作。 如果不是,则应使用资源的绝对路径:

 URL imgURL = getClass().getResource("/resources/images/Bgnd11.jpg"); 

另外,不要弄乱bin文件夹。 这是Eclipse的目标文件夹,执行干净的构建将删除此目录中的所有内容。 只需将图像添加到源目录中的相应包中,Eclipse将在构建项目时自动将它们复制到目标目录。