1

我有一个 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

我尝试将类更改为同一个包中的不同类,但它仍然会引发相同的错误。有任何想法吗?

4

1 回答 1

1

如果 URI 不透明,则调用getPath不起作用。这对于文件 URI 是可能的,例如file:C:\somePath\someFile. 这个 URI 没有 URI 意义上的路径。但是,修复它非常容易。只需删除getPath调用:

File jarFile = new File(codeSource.getLocation().toURI());
于 2013-09-26T17:09:56.260 回答