gpt4 book ai didi

java - 打包包含图像的程序

转载 作者:行者123 更新时间:2023-12-01 19:58:58 24 4
gpt4 key购买 nike

我在将包含图像的 java 程序打包到 jar 中以将其转换为可执行文件时遇到了巨大的问题。这些图像已用于程序和按钮的背景。请参见下图,其中显示了我想要转换为 jar 的程序。

IMAGE

enter image description here

如上所示,程序运行正常。我创建了相同的程序,没有自定义背景和不包含图像的自定义按钮,并成功将其打包到 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 所示,尝试在与返回的类相同的包中查找 Bgnd11.jpg通过getClass()。因此,如果该类位于包 resources.images 中,那么它就可以在我们的示例中工作。如果不是,您应该使用资源的绝对路径:

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

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

关于java - 打包包含图像的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16486858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com