2013-06-30 48 views
0

我知道這不是一個好的做法,可以捕捉錯誤,但在這種情況下,重要的是要做到這一點。我試圖運行其中包含我的遊戲的一部分的罐子,但它給我一個unsatisfiedlink錯誤,但這裏是有趣的部分: 我使用這個代碼:捕捉不滿意的鏈接錯誤

System.setProperty("org.lwjgl.librarypath", new File("lib/natives").getAbsolutePath()); 

但在NetBeans中,它給了我這個錯誤,但是,jar運行。現在,如果我改變代碼,這樣:

System.setProperty("org.lwjgl.librarypath", new File("Dist/lib/natives").getAbsolutePath()); 

現在,它運行在NetBeans,但罐子它不工作...我不明白這一點!,因此,我試圖使用try/catch語句爲使用兩者,並且還有這是完整的代碼:

try{ 
    System.setProperty("org.lwjgl.librarypath", new File("lib/natives").getAbsolutePath()); 
} 
catch (UnsatisfiedLinkError e){ 
    System.setProperty("org.lwjgl.librarypath", new File("dist/lib/natives").getAbsolutePath()); 
} 

,當我在NetBeans中運行它,它給我的錯誤的第一線,而不是抓的錯誤部分。這是怎麼回事?在此先感謝朋友!

+0

我不會把第二個System.setProperty()放在catch塊中。將每個System.setProperty()調用放到一個try {}塊中,並在每個塊中設置一個布爾值,以表明catch是否被命中。因此,首先嚐試第一個System.setProperty()的{}塊,並且如果catch塊由於錯誤而被觸發,請設置一個布爾值來表示應該在其try塊中嘗試替代System.setProperty()。 –

+0

哦,謝謝你,但顯然,我現在正在做一個混亂的代碼,因爲jar通過雙擊運行,但如果我嘗試從cmd運行它,它沒有運行。 –

回答

1

在這樣的代碼:

new File("Dist/lib/natives").getAbsolutePath() 

你給的路徑 「DIST/lib目錄/土人」 相對於JRE 「用戶」(或工作)目錄。相對於系統屬性「user.dir」的值。該屬性的值在啓動JVM時設置,並且可以根據JVM的啓動方式而有所不同。您應該打印或記錄'user.dir'的值,並觀察您問題中每個啓動案例的差異,以瞭解發生了什麼。

System.ou.println(System.getProperty("user.dir"));