2015-11-05 100 views
1

我試圖使用Desktop.getDesktop()一個.jar文件來啓動一個文本文件。打開(文件)從.jar文件啓動一個文本文件(文件路徑?)

String fileName = "file.txt"; 

URL url = getClass().getResource(fileName); 
File fileToRead = new File(url.toURI()); 
Desktop.getDesktop().open(fileToRead); 

我爲簡單起見,省略了try-catch塊。 它可以在從eclipse運行時打開我的文件。但是,一旦我導出到.jar文件,我得到一個NullPointerException在File fileToRead = new File(url.toURI());

+1

「file.txt」保存在哪裏? –

+0

你不能「啓動一個文本文件」,這不是一個可執行文件。你有沒有檢查文件是否仍然被發現?添加一個打印語句與你正在使用的網址,並檢查你的驅動器文件是否存在 – Stultuske

+0

你能改正你的例子嗎?目前我們不知道什麼是'file'(我懷疑你想在那裏有'fileName') – Pshemo

回答

0

當您將一個類打包到一個.jar文件中時,它通常會使其嵌套更深一層。

因此,您可以嘗試更改第一行:

String filename = "../file.txt"; 
0

綜觀Class.getResource(String)的JavaDoc:

絕對資源名是從給定的資源名稱中使用此算法構建:

如果名稱以'/'開始,那麼資源的絕對名稱是'/'後面的名稱部分。 否則,絕對名稱的格式如下: modified_package_name/name 其中modified_package_name是此對象的包名稱,其中'/'替換爲'。'。

參數:

名稱 - 所需資源的名稱

返回: 一個URL對象或如果使用該名稱未找到資源時

您的資源沒有被發現,因此NullPointerException。按照JavaDoc(絕對路徑以'/'開頭或相對於this的類別(您調用的對象getClass().getResource(fileName)))描述的JAR內指定路徑,您應該得到它。