【发布时间】:2014-08-30 13:47:53
【问题描述】:
只是导出的可执行 Jar 文件有问题。整个项目在 Eclipse 中运行良好,但是从命令提示符导出和运行时出现以下错误
我认为它无法找到其中一张图像,但不明白为什么在 Eclipse 中运行时它会在 jar 文件中而不是在项目中抛出错误。该项目有一个 runner 类,它打开包含 smallframe 类的主页。这些都在 GUI 包中,使用的任何图像都在 src/Resources 文件夹中。
任何关于在哪里看起来最受欢迎的建议。
编辑:只需更改所有图像的代码,但由于某些“无法从对象类型对非静态方法 getClass() 进行静态引用”而出现错误,因此使用了类名“GenerateImages.class”而不是 getClass()。这适用于 Eclipse,但似乎不适用于可执行 Jar 文件。
已经把 createQuestionOne 的代码放在下面了,只是想知道我做错了什么:
public static void createQuestionOne(int startShape, int endShape, String symbols, int scenarioNum, String fileSaveLocation) throws IOException
{
//shapes
final BufferedImage shapeLeft = ImageIO.read(GenerateImages.class.getClassLoader().getResource(startShape + ".png"));
final BufferedImage shapeRight = ImageIO.read(GenerateImages.class.getClassLoader().getResource(endShape + ".png"));
final BufferedImage questionMark = ImageIO.read(GenerateImages.class.getClassLoader().getResource("questionMark.png"));
//arrows
final BufferedImage rightArrow = ImageIO.read(GenerateImages.class.getClassLoader().getResource("rightArrow.png"));
//Transformations
final BufferedImage transform1 = ImageIO.read(GenerateImages.class.getClassLoader().getResource(symbols.substring(0,1)+ ".png"));
//
final BufferedImage none = ImageIO.read(GenerateImages.class.getClassLoader().getResource("None.png"));
final int width = 60;
final int height = 90;
final int smallWidth = 34;
final BufferedImage questionLayout = new BufferedImage(5*width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D reDraw = questionLayout.createGraphics();
//set background to white
reDraw.setColor(Color.WHITE);
reDraw.fillRect(0, 0, questionLayout.getWidth(), questionLayout.getHeight());
//Question Line
reDraw.drawImage(shapeLeft,0,15, null);
reDraw.drawImage(rightArrow,width,15, null);
reDraw.drawImage(transform1,width*2,30, null);
reDraw.drawImage(rightArrow,width*2+smallWidth,15, null);
reDraw.drawImage(questionMark,width*3+smallWidth,15, null);
try{
ImageIO.write(questionLayout, "png", new File(fileSaveLocation + "\\S" + (scenarioNum + 1) +"Q1.png"));
;}catch (Exception e) {}
//output correct answer as image
drawSingleShapeImage(shapeRight,scenarioNum, 1, fileSaveLocation);
drawDistractionShapeImage(none,scenarioNum, 1, 4, fileSaveLocation);
}
【问题讨论】:
-
尝试以
className.class.getClassLoader().getResource("yourImage")的方式读取图像并重新创建 jar -
感谢您的工作-在整个代码中进行了一些替换。错误是因为我已经硬编码了位置,然后在导出 jar 时更改了位置。只是想明白,所以不要犯同样的错误两次
标签: java executable-jar