我有 2 个 Java 程序,分别位于 一个在 c:\test 中,另一个在 c:\test\new 中
我可以编译它们而不会出现任何错误\javac
但是当我尝试执行文件\java 时 它显示这样的错误
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ButtonFrame.makeButton(ButtonTest3.java:42)
at ButtonFrame.<init>(ButtonTest3.java:29)
at ButtonTest$1.run(ButtonTest.java:17)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我把它放在我的类路径中
CLASSPATH value- C:\test;C:\test\new
但是如果我将 CLASSPATH 中的值的顺序更改为此
CLASSPATH value- C:\test\new;C:\test
错误消失了
为什么?这可能会发生 只有顺序才重要吗?
最佳答案
两个文件夹中都有一个同名的类。在 C:\test
中,有一个 ButtonTest3
类版本,其中包含导致此 NullPointerException
的编程错误。在 C:\test\new
中,有一个不同版本的 ButtonTest3
类,它不包含此错误,或者可能有一个 ButtonTest
类,它与 C:\test
中的类执行完全不同的操作。
清理你的类路径。在类路径中存在具有相同签名的重复的不同版本类是不好的。如果您的意图是 new 应该是包标识符,那么您需要将其远离类路径。但是,这样的包名会导致编译错误,所以不可能是这样。
<小时/>对于该错误,NullPointerException
相对来说比较容易确定和修复。首先看堆栈跟踪的第一行:
at ButtonFrame.makeButton(ButtonTest3.java:42)
这表明它发生在 ButtonTest3
类的第 42 行,在 makeButton()
方法内。现在转到 ButtonTest3.java
的第 42 行,它看起来像:
someObject.doSomething();
查看哪里使用点运算符.
来调用方法或访问某个对象的字段。 NullPointerException
意味着 someObject
在特定时刻为 null
。没有实例!
这是一个简单的修复:只需确保在调用/访问它时它不是 null
即可:
someObject = new SomeObject();
// ...
someObject.doSomething();
关于java - CLASSPATH 中的值的顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796211/