我有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值-C:\ test; C:\ test \ new
但如果我将CLASSPATH中的值的顺序更改为此
CLASSPATH值-C:\ test \ new; C:\ test
错误消失了
为什么?这可能会发生 只有订单很重要吗?
答案 0 :(得分:1)
您在两个文件夹中都有一个同名的课程。在C:\test
中有ButtonTest3
类的版本,其中包含导致此NullPointerException
的编程错误。在C:\test\new
中有ButtonTest3
类的不同版本,它不包含此错误,或者可能有一个ButtonTest
类与C:\test
中的类完全不同
清理类路径。在类路径中使用相同的签名重复不同的版本化类是不好的。如果您的意图是new
应该是包标识符,那么您需要将其从类路径中移开。但是,这样的包名会导致编译错误,所以不可能。
关于这个bug,NullPointerException
对于naildown和修复来说相对微不足道。首先看一下stacktrace的第一行:
at ButtonFrame.makeButton(ButtonTest3.java:42)
它告诉我ButtonTest3
方法中makeButton()
类的第42行已经发生了这种情况。现在转到ButtonTest3.java
的第42行,它看起来像是:
someObject.doSomething();
查看点运算符.
用于调用方法或访问某个对象的字段的位置。 NullPointerException
表示someObject
在特定时刻为null
。没有实例!
这是一个简单的修复方法:只需确保在您调用/访问它时不 null
:
someObject = new SomeObject();
// ...
someObject.doSomething();
答案 1 :(得分:0)
好吧,我不相信你可以在一个源文件中定义两个类。您可以将它们定义为子类。
根据Java spec:
每个
class
文件都包含 单个类的定义或 接口。一班或一班 界面不需要外部 字面上包含的表示 一个文件(例如,因为 class由类加载器生成), 我们将通俗地提及任何 有效的代表或类 接口在class
文件中 format.format。
您可以将ButtonFrame
放在ButtonTest2
内。
public class ButtonTest2
{
public static void main(String[] args)
{
...
ButtonFrame frame = new ButtonFrame();
}
class ButtonFrame extends JFrame {
....
}
}
或者,将它们放在不同的java文件中。
答案 2 :(得分:0)
你在程序的顶级有两个课程,这是错误的。但是把它放在一边,你的程序不会在第一时间编译。 要成功编译该程序,请使用以下NppExec脚本:
cmd /c cd "$(CURRENT_DIRECTORY)" && "%JAVA_HOME%\bin\javac" "$(FULL_CURRENT_PATH)"
cmd /k cd "$(CURRENT_DIRECTORY)" && "%JAVA_HOME%\bin\java" "$(NAME_PART)" && exit
确保将JDK文件夹设置为JAVA_HOME
环境变量。
然后再试一次。