我有一个java应用程序,一旦导出到可执行jar,就需要知道它所在的位置。所以,我的代码中有以下功能:
private void setLocalJarPaths() throws URISyntaxException{
CodeSource codeSource = ShopRecipient.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
localJarPath = ShopRecipient.class.getProtectionDomain().getCodeSource().getLocation().getPath(); //getgetgetgetgetgetgetget
localParentPath = jarFile.getParentFile().getPath();
}
当我从eclipse运行时,这可以工作,但是一旦我将它导出到一个可运行的jar文件,它就会抛出以下错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.io.File.<init>(Unknown Source)
at bsReportSender.ShopRecipient.setLocalJarPaths(ShopRecipient.java:71)
at bsReportSender.ShopRecipient.<init>(ShopRecipient.java:23)
at
我尝试将类更改为同一个包中的另一个类,但它仍然会抛出相同的错误。有什么想法吗?
答案 0 :(得分:1)
如果URI不透明,则调用getPath
不起作用。对于像file:C:\somePath\someFile
这样的文件URI,这是可能的。此URI在URI意义上没有路径。但是,修复它很容易。只需删除getPath
调用:
File jarFile = new File(codeSource.getLocation().toURI());