【发布时间】:2015-05-08 17:13:02
【问题描述】:
此问题经过编辑以包含所有问题。下面会添加新的图片链接。
我的程序在 NetBeans 中运行良好,从 NetBeans 编译的 jar 文件运行时无法加载程序。我在 Java 1.6_45 上编译,这只是为了兼容性,因为这是一个面向学校的程序,适用于几乎没有收到任何升级或更新的旧机器。
无论如何,因为当我尝试将程序作为 .jar 文件时从未加载过,所以我很担心并查找了手动方法来使 jar 运行。我尝试了命令提示符命令 java -jar PhysicsEquations.jar ,我将其直接复制到了我的用户文件夹中,因此我不必担心类路径。
这是我收到的错误消息(下面是第一个链接),一个 IllegalArgumentException。我不知道该怎么做,我已经研究了几天,现在尝试不同的东西。如果可以更好地解释,我愿意重试任何事情。
这是整个 EquationImage 类(只有几行,请耐心等待)。在其他代码中,我所做的只是调用构造函数,例如 EquationImage fma = new EquationImage("fma.jpg");,然后使用 setBounds(x,y,width,height); 将其添加到面板中,该面板已添加到包含所有方程式的 CardLayout 中。
package physicsequations;
...
public class EquationImage extends JPanel {
public EquationImage() {
}
public EquationImage(String filename) {
try {
System.out.println(filename);
imageBuffer = ImageIO.read(getClass().getResourceAsStream("images/" + filename));
}
catch(IOException e) {
JOptionPane.showMessageDialog(null, "EquationImage could not find/load the file \n" + filename, "Error Message", JOptionPane.PLAIN_MESSAGE);
}
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
graphics.drawImage(imageBuffer, 0, 0, null);
}
private BufferedImage imageBuffer = null;
}
正如代码和错误消息中所指出的,构造函数确实收到了一个文件名。在 NetBeans 中,编译器能够正确找到所有图像。但是,在我使用“清理和构建”获得的 jar 中,我是否真的看到带有错误的 JOptionPane 可能会有所不同。
我被要求提供我的代码的文件路径。
在项目中,我有文件夹 PhysicsEquations。 PhysicsEquations 有文件夹 dist、build、nbproject 和 src。 PhysicsEquations 也有文件 build 和 manifest.mf。
src有文件夹physicsequations,就是EquationImage所在的包。
physicsequations 然后有五个文件和一个文件夹“图像”。这些文件是 Main、EquationPanel、EquationImage、BadInputException 和 Variable。
images 包含我所有的图片,包括 Physics.jpg,这是我在 Main 中使用的图标:
String imagePath = "physics.jpg";
InputStream imgStream = Main.class.getResourceAsStream("images/" + imagePath);
BufferedImage myImg = null;
try {
myImg = ImageIO.read(imgStream);
}
catch(IOException e) {
JOptionPane.showMessageDialog(null, "The program has failed to load file physics.jpg from the source package.", "Error Message", JOptionPane.ERROR_MESSAGE);
}
setIconImage(myImg);
在 jar 本身中,我打开 jar 并有 2 个文件夹:META-INF 和physicsequations。在physicsequations 文件夹中,有101 个类文件和一个名为images 的文件夹。该文件夹包含我在项目中使用的所有 17 张图片。下面是 jar 中 META-INF 中 manifest.mf 文档的文本。 (谁能向我解释为什么它显示为 1.8?我的项目属性中有 1.6...)
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.8.0_31-b13 (Oracle Corporation)
Class-Path:
X-COMMENT: Main-Class will be added automatically by build
Main-Class: physicsequations.Main
http://i.stack.imgur.com/IqgzE.jpg
http://i.stack.imgur.com/rHaDa.jpg
http://i.stack.imgur.com/j5Npw.jpg
http://i.stack.imgur.com/Yt2O3.jpg
我希望所有链接都能提交,因为它说我有 10 个代表的限制。
【问题讨论】:
-
您是否检查过图像是否包含在 jar 中?
-
图片的路径是什么?当使用
getClass().getResource(...)时,如果使用相对路径,则类的包名将作为路径的前缀。您可以将getClass().getResource("/...")用于绝对路径,它将路径附加到classpath搜索路径 -
jar 文件只是一个 zip 文件。打开 jar 文件(将扩展名重命名为 zip)。您的图像在 jar 文件中吗?
-
我打开了jar文件。我有两个文件夹,其中一个是物理方程,我可以在文件夹中看到我的所有图像。
-
我不太明白你这个疯狂程序员,对不起。类路径的东西让我很困惑。
标签: java jar embedded-resource javax.imageio illegalargumentexception