2014-09-01 114 views
0

我有一個Java桌面應用程序,我在我拉上分發給學生的NetBeans開發。這裏面的zip文件我有的.jar,包含擺動佈局罐子「lib」目錄和目錄我名爲包含所需的所有程序中的文本文件「sourcefiles」。打開文件,而不是當前工作目錄

所有工作正常,如果jar文件被雙擊,但是從命令行java -jar MyApp.jar)運行時,它只能找到「sourcefiles」目錄,如果你第一次到該目錄的文件在運行命令之前,有些學生會忘記做的事情。顯然,沒有辦法從我的代碼中改變當前的工作目錄。以「sourcefiles」的路徑在我的代碼爲相對路徑給出,假設我在MyApp的文件夾。那麼我該怎麼做才能讓程序可以從命令行運行,而不必將cd包含到包含目錄中?有什麼需要將其添加到清單文件?

這個問題可以通過使用Linux的學生大多是面對,但它是在Mac上一樣。我認爲它在Windows上是一樣的,但我猜想沒有一個Windows的學生從命令行運行它。

+0

如何訪問你的資源,你的代碼? – Dici 2014-09-01 14:22:09

+0

BufferedReader f = new BufferedReader(new InputStreamReader(new FileInputStream(filename),「UTF-8」));其中filename是相對路徑:sourcefiles/xxxxx。運行程序的jar文件,java庫和sourcefiles文件夾都在一個文件夾中,然後我將其壓縮以發送給學生。我不希望jar包含源文件,因爲它們是可能被程序修改的資源。除了命令行之外,此路徑似乎適用於所有內容。 (這些是人文學生,比其他人更懂技術。) – Numa 2014-09-05 09:43:54

回答

1

您不能更改默認的目錄,但你可以得到的目錄罐類是運行並使用在你的代碼爲基礎路徑。

String jarLocation = ThisClass.class.getProtectionDomain() 
         .getCodeSource().getLocation().getPath(); 

從這裏就可以得到該目錄的jar是,很可能你會想這個包裹起來爲你的學生可以調用的方法。

+0

我用zikaDirectory = jarFile.getParentFile()。getName();然後如果(!zikaDirectory.equals(currentWorkingDirName))發現這是否發生,但我對你的文章的最後一行關於使用該程序的學生可以調用的方法感到困惑。 – Numa 2014-09-03 10:29:55

+0

@Numa我建議你給學生一些隱藏一些更難的代碼的代碼。 – 2014-09-04 16:11:12

相關問題