【发布时间】:2014-10-13 19:24:51
【问题描述】:
persistenceProperties.load(is); 行在以下方法中抛出 nullpointerexception。 如何解决此错误?
public void setUpPersistence(){
final Properties persistenceProperties = new Properties();
InputStream is = null;
try {
is = getClass().getClassLoader().getResourceAsStream("src/test/samples/persistence.properties");
persistenceProperties.load(is);
}catch (IOException ignored) {}
finally {
if (is != null) {try {is.close();} catch (IOException ignored) {}}
}
entityManagerFactory = Persistence.createEntityManagerFactory(
"persistence.xml", persistenceProperties);
}
我已经尝试通过将包含该方法的类移动到应用程序结构中的各个其他位置来对此进行试验,并且还通过以下方式更改错误之前的代码行:
is = getClass().getClassLoader().getResourceAsStream("persistence.properties");
is = getClass().getClassLoader().getResourceAsStream("/persistence.properties");
is = getClass().getClassLoader().getResourceAsStream("/src/test/samples/persistence.properties");
is = getClass().getClassLoader().getResourceAsStream("other/paths/after/moving/persistence.properties");
但是每次调用该方法时仍然会抛出错误。
这是 eclipse 项目目录结构的打印屏幕。包含该方法的类称为TestFunctions.java,persistence.properties 的位置如图所示:
**编辑:**
根据下面的反馈,我将方法更改为:
public void setUpPersistence(){
final Properties persistenceProperties = new Properties();
InputStream is = null;
try {
is = getClass().getClassLoader().getResourceAsStream("persistence.properties");
persistenceProperties.load(is);
}catch (IOException i) {i.printStackTrace();}
finally {
if (is != null) {try {is.close();} catch (IOException ignored) {}}
}
entityManagerFactory = Persistence.createEntityManagerFactory(
"persistence.xml", persistenceProperties);
}
我还将 mainTest.TestFunctions.java 移至 src/test/java。总之,这些都会导致以下新的堆栈跟踪:
Exception in thread "main" java.lang.NoClassDefFoundError: maintest/TestFunctions
at maintest.Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: maintest.TestFunctions
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
【问题讨论】:
-
is如果导致异常,则必须为 null。你用调试器找出原因了吗? -
你有没有明确的类
Properties的无参数构造函数?如果有,请发布。 -
您能尝试清理并重建您的项目吗?当您将 TestFunctions 移动到 src/test/java 但继续从 src/main/java 引用它时,该项目甚至不应该是可编译的......
-
无关注意事项:考虑使用 try-with-resources 来关闭您的流。
-
@Puce 这个问题现在已经解决了。谢谢你的见解。我仍在尝试让 hbm2ddl 在 MySQL 数据库中创建表。 create-drop 没有做这项工作。您使用 hbm2ddl 吗?这是链接:stackoverflow.com/questions/26348480/…
标签: java inputstream