2015-11-05 124 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内指定路径,您应该得到它。