2014-08-30 44 views
0

只有导出的可执行文件Jar文件存在问题。整个项目在eclipse中工作正常,但是当从命令提示符导出并运行时出现以下错误 enter image description here可执行文件Jar文件将不会运行:命令提示符中的错误

我认为它无法找到其中一个图像,但不明白为什么它会抛出jar文件中的错误,而不是在eclipse中运行时的项目。该项目有一个runner类,它打开包含smallframe类的主页面。这些都在GUI软件包中,所用的所有图像都在src/Resources文件夹中。

任何建议看哪里最受欢迎。

编辑:只是更改所有图像的代码,但得到一些错误的一些“无法从类型对象的非静态方法getClass()静态引用”所以使用类名称“GenerateImages.class “而不是getClass()。这在Eclipse中工作,但似乎没有在可执行Jar文件中工作。 enter image description here

已经把代码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); 

}

+1

尝试读取图像这样'className.class.getClassLoader() .getResource(“yourImage”)'并重新创建罐子 – SparkOn 2014-08-30 13:50:29

+0

谢谢你的工作 - 在代码中做一些替换。是错误的,因为我已经硬编码了当jar被导出时改变的位置。只是想明白,所以不要犯同样的错误两次 – user1836661 2014-08-30 14:15:43

回答

1

你不应该硬编码的资源位置当它被导出为jar或war文件时可能会发生变化解决问题的一种可能的方法是使用

getResource of java.lang.ClassLoader - 正如javadoc所说 - 它发现具有给定名称的电子资源。资源是一些数据(图像,音频,文本等),可以通过类代码以独立于代码位置的方式访问。 资源的名称是标识资源的“/”分隔的路径名。

此方法将首先搜索父类加载器的资源;如果父项为空,则搜索内置于虚拟机的类加载器的路径。如果失败,该方法将调用findResource(String)来查找资源。

甚至尝试用getResourcesAsStream()

所以你的情况看使用的getResource(将文件加载资源),并重新创建的jar

相关问题