2011-06-04 83 views
1

我正在研究一個Java應用程序,當然這個應用程序可以在USB操作系統上運行。對於Mac用戶,我將jar(App和更新程序)捆綁到Apple .app程序中。現在:讓罐子互相啓動並使用棒子上的相關文件夾路徑的最佳方式是什麼?我問,因爲我注意到,在Mac上它就像.app文件夾是啓動的文件(而不是內部的jar),因此父目錄是所有文件將被存儲的工作目錄。在Windows和Linux上,它只是一些MyApp.app文件夾,文件將在裏面。 通過代碼切換情況和路徑真的是解決這個問題的唯一方法嗎? 謝謝Windows,Mac和Linux上的Java程序(Unix)

回答

2

您可以向JVM詢問給定類的物理位置。 From http://www.exampledepot.com/egs/java.lang/ClassOrigin.html

// Get the location of this class 
Class cls = this.getClass(); 
ProtectionDomain pDomain = cls.getProtectionDomain(); 
CodeSource cSource = pDomain.getCodeSource(); 
URL loc = cSource.getLocation(); // file:/c:/almanac14/examples/ 

即使對於jar文件,這也可以工作。

當你知道位置時,你可以從那裏導航。

+0

我需要類的位置來做到這一點,或者我得到了什麼錯?還有一個問題是,.app文件夾內所需的jar文件不在lib文件夾中,因此在啓動時由控制檯/運行時引發ClassNotFoundExceptions。 – Magreet 2011-06-04 13:59:22

+0

我得到了一個解決方法1.綁定.app 2.進入.app並將jar移動到lib文件夾中3.從.app doubleclick和Runtime.getRuntime()。exec()開始工作...但這並不漂亮: -/ – Magreet 2011-06-04 14:05:29

+0

這聽起來像你沒有按照預期的方式去做。你應該使用官方的Apple jar捆綁器來創建一個不錯的捆綁包。 – 2011-06-04 14:25:43

1

最好的選擇是爲每個操作系統創建啓動器,然後從這些啓動器調用JVM運行jar。對於Linux製作shell腳本,在Mac上它將是.app(或shell腳本),在Windows上,.bat或可執行文件也可以工作。

+0

是的,這是我的意圖,但這些罐子也需要「溝通」 – Magreet 2011-06-04 14:01:38

+0

這取決於應用程序。通常情況下,如果它們在classpath中,就可以從這些jar中的類中創建對象。 – Xolve 2011-06-04 14:34:35

相關問題