2010-01-31 137 views
0

我正在一個Java應用程序和程序中使用一些文件,如圖像,本地數據庫和.htm文件(用作幫助文件)。java- jar文件找不到資源

我試圖使訪問這些資源,位置獨立。所以我在包含我的源文件的包中創建了一個名爲resources的子文件夾,並且在那裏放置了所有這些圖像等。我通過.getResource()方法訪問它們,而不是使用路徑。例如,我就是這樣訪問一個圖像資源:

lang_icon=new javax.swing.ImageIcon(getClass().getResource("/myeditor/resources/checked.gif")); 

問題是當構建.jar文件時,它無法正常工作。它成功加載圖像,但無法連接到本地數據庫或打開.htm文件。
這裏是我用來訪問.htm文件(它工作正常,當我通過Netbeans運行應用程序)

URL helpFile= getClass().getResource("/myeditor/resources/help/help.htm"); 

    try { 
     BrowserLauncher launcher = new BrowserLauncher(); 
     launcher.openURLinBrowser(helpFile.toString()); 
    } catch (BrowserLaunchingInitializingException ex) { 
     Logger.getLogger(mainAppFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (UnsupportedOperatingSystemException ex) { 
     Logger.getLogger(mainAppFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 

代碼,這裏是我用來訪問我的本地數據庫的代碼

URL url = getClass().getResource("/myeditor/resources/icddb"); 
    database = new File(url.getFile()); 
    try 
     { 
      Class.forName("org.hsqldb.jdbcDriver"); 

      con = DriverManager.getConnection("jdbc:hsqldb:file:" + database+"\\icddb", "sa", ""); 

當我嘗試通過.jar文件打開.htm文件時,它顯示此錯誤「此文件沒有與其關聯的程序來執行此操作。在控制面板的文件夾選項中創建關聯」。
當我嘗試連接到本地數據庫時,它顯示「嚴重無法重新打開數據庫」。
所有想法都讚賞! 謝謝你,對不起我的英文!

回答

1

你能打印出你要求瀏覽器打開的URL嗎?這應該更清楚地表明發生了什麼事情。

我懷疑你從getResource()得到的URL是一個指向的URL,你的.jar文件在之內。因此,瀏覽器將無法打開。我會(可能)將該文件解壓到一個臨時目錄並讓瀏覽器打開它。

+0

該錯誤顯示它無法打開以下URL:jar:file:C:/ Users/gosling /.../ cancer_registry/editor/dist/editor.jar!/myeditor/resources/help/help.htm – gosling 2010-01-31 13:06:12

+0

因此,該URL指向.jar文件中。您的瀏覽器不會理解這一點,並且您應該通過getResourceAsStream()將該文件解壓縮到臨時目錄,並從那裏打開它。 – 2010-01-31 13:11:34

+0

如果資源「/ myeditor/resources/icddb」是一個數據庫,那麼您在那裏會遇到同樣的問題。另外,你還有問題,即應用程序更新數據庫的位置將被存儲。您不想嘗試更新JAR文件中的數據庫! – 2010-01-31 14:14:20