Runnable jar与java -jar运行正常,但双击出现问题

问题描述:

我正在使用eclipse IDE,并且使用'export-> Runnable Jar'导出了我的项目。在我的代码,我已加载使用Runnable jar与java -jar运行正常,但双击出现问题

URL map1url = this.getClass().getResource("map01.txt"); 

后来

inputmap = new File(map1url.getFile()); 

一张地图,然后使用

Scanner sc = null; 
    try { 
     sc = new Scanner(inputmap); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

现在,当我打包map01.txt到扫描其数据jar,然后双击它,它会运行,但无法找到map01.txt。当我使用java -jar时,它运行,但仍然无法找到地图。 当我将map01.txt放置在与jar文件相同的目录中,但实际上并不放在jar中,然后双击它时,它会运行,但不会找到映射。如果我使用java -jar运行它,它会运行并加载地图。这个问题的原因是什么?我该如何解决它?而map01.txt是唯一不起作用的资源。我已经加载了许多放置在jar文件中的图像,并且它们都加载并显示正常。对于图像我用

URL url = this.getClass().getResource("myImage.gif"); 
    try { 
     BufferedImage myImage = ImageIO.read(url); 
    } catch (IOException e) { 
    }  

为什么他们的工作,而不是我的地图?我该如何解决这个问题,以便我可以将所有资源打包到一个jar中,然后双击它运行?

当你说“新文件(map1url.getFile())”时,你最终会得到一个java.io.File,它指向当前目录中的一个文件。如果该文件实际上位于进程的当前目录中(如果文件位于shell的当前目录中并且使用“java -jar”,则会发生这种情况;否则这将不起作用;否则不会。

为什么不直接使用的getResource()。的OpenStream()来读取地图文件?

+0

因为它必须是一个文件对我来说,扫描。 – Keelx 2011-04-09 22:30:03

+0

不。扫描仪具有接受一个I​​nputStream几个构造函数(你会得到什么来自openStream()),它们会一起插入。 – 2011-04-09 22:36:13