2014-03-05 60 views
2

時,我有以下代碼:FileNotFoundException異常運行jar文件

package test; 


import org.eclipse.swt.SWT; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class SWTTest { 

    public static void main(String[] args) { 
     SWTTest test=new SWTTest(new Display()); 
     test.run(); 
    } 


    private Shell shell; 
    private Display display; 


    public SWTTest(Display main_display) { 
     display=main_display; 

     shell=new Shell(display, SWT.DIALOG_TRIM); 
     shell.setText("Test window"); 
     shell.setBackgroundImage(new Image(display,"./image/blue_screen.jpg")); 
    } 

    public void run() { 

     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
    } 
} 

這是編譯和運行。問題是當我將它作爲jar文件導出時。
只是爲了確保我正確地做到了:在工程 - >導出...->運行的JAR文件 -
右鍵 - >選擇正確的啓動配置,然後「完成」。
它創建了一個jar文件,但後來當我從終端運行它,我得到:

Exception in thread "main" org.eclipse.swt.SWTException: i/o error (java.io.FileNotFoundException: ./image/blue_screen.jpg (No such file or directory)) 
    at org.eclipse.swt.SWT.error(Unknown Source) 
    at org.eclipse.swt.SWT.error(Unknown Source) 
    at org.eclipse.swt.graphics.ImageLoader.load(Unknown Source) 
    at org.eclipse.swt.graphics.ImageDataLoader.load(Unknown Source) 
    at org.eclipse.swt.graphics.ImageData.<init>(Unknown Source) 
    at org.eclipse.swt.graphics.Image.<init>(Unknown Source) 
    at test.SWTTest.<init>(SWTTest.java:31) 
    at test.SWTTest.main(SWTTest.java:13) 
Caused by: java.io.FileNotFoundException: ./image/blue_screen.jpg (No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:146) 
    at java.io.FileInputStream.<init>(FileInputStream.java:101) 
    at org.eclipse.swt.internal.Compatibility.newFileInputStream(Unknown Source) 
    ... 6 more 

爲什麼在Eclipse中運行,而不是作爲一個jar文件?
爲什麼一下子找不到圖像? (我還會提到,我添加了新的源文件夾到我的項目中,並將其命名爲「image」,現在它位於「src」文件夾旁邊 - 我想說的是「image」文件夾是我的Eclipse項目中的Source文件夾)。
那麼我在這裏錯過了什麼?

+0

從路徑中刪除前導'。/'。 – m0skit0

+0

因爲您需要使用類加載器來獲取您的文件。在Eclipse中,濫用代碼運行爆炸的事實。 –

+0

@BoristheSpider,它是什麼意思:「代碼運行爆炸」? m0skit0,試過了,即使在月食中也不行。 –

回答

5

當您的圖像存儲在jar中時,您需要將它們作爲資源加載。沿着這些路線,但你應該關閉流。

BufferedImage image = ImageIO.read(MyClass.class.getResourceAsStream("something.png")); 

當您在Eclipse中運行,你的圖像目錄的地方,這樣你就可以用通常的File對象看到他們,但是當他們不在罐子本身。

+0

我嘗試了太多,但getResource()方法返回URL對象,這是不適用的圖像構造... –

+0

你可能想看看類似的職位,如:http://stackoverflow.com/questions/3915725/locating -a-jar-package中的資源你可能會發現你在那裏回答。 – Alan

+0

使用BufferedImage,BufferedImage image = ImageIO.read(MyClass.class.getResourceAsStream(「something.png」)); – NESPowerGlove

相關問題