在jar中使用getClass返回null点异常

时间:2014-04-14 06:26:01

标签: java nullpointerexception classloader configurationmanager

我已经尝试了有关stackoverflow上此问题的所有内容,但似乎无法使用.getClass方法正确检索xml文件。我继续得到一个空指针异常,但无法弄清楚为什么。我尝试了几种变体。如果我做错了什么,请告诉我。此外,如果您需要任何其他信息,请询问:D。以下是我尝试的一些变体

URL configURL = new URL("" + Transcriber.class.getClass().getClassLoader().getResourceAsStream("/config.xml"));
ConfigurationManager cm = new ConfigurationManager(configURL);

URL configURL = new URL("" + Transcriber.class.getClass().getClassLoader().getResource("/config.xml"));
ConfigurationManager cm = new ConfigurationManager(configURL);

InputStream configURL = Transcriber.class.getClass().getClassLoader().getResourceAsStream("/config.xml");
ConfigurationManager cm = new ConfigurationManager(configURL.toString());

我还应该注意,当使用eclipse时,我能够检索xml。但是,当转换为可执行的jar时,我不能。

编辑:

URL configURL = new URL("" + Transcriber.class.getResourceAsStream("config.xml"));

控制台输出=

Exception in thread "main" java.net.MalformedURLException: no protocol: java.io.BufferedInputStream@238be9f2
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at speechcapture.Transcriber.main(Transcriber.java:53)

1 个答案:

答案 0 :(得分:2)

你的第一个问题是

Transcriber.class.getClass()

返回Class类的Class对象。你想要的是

Transcriber.class

第二个问题是,假设您的config.xml资源与Transcriber类位于同一个包中,那么您需要提供资源的完全限定路径或相对于该资源获取它Transcriber类'包。所以要么

URL configURL = Transcriber.class.getResource("config.xml");

URL configURL = Transcriber.class.getResource("/com/example/config.xml");