尝试获取本地jar路径时,Java codeSource为空指针

时间:2013-09-26 16:13:59

标签: java nullpointerexception

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

我尝试将类更改为同一个包中的另一个类,但它仍然会抛出相同的错误。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

File jarFile = new File(codeSource.getLocation().toURI());