CLASSPATH内的值的顺序是什么?
我于c seperately 扰2 java程序:在C \试验和其他:\测试\新CLASSPATH内的值的顺序是什么?
我可以编译两者是没有任何错误\ 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)
我把这个在我的类路径
CLASSPAT错误ħ值 - C:\测试; C:\测试\新
但如果我改变的值的顺序在CLASSPATH本
CLASSPATH值 - C:\测试\新; C^:\测试
的错误只是去
为什么?这可能发生 只有订单很重要?
你在这两个文件夹中都有一个同名的班级。在C:\test
中有ButtonTest3
类的一个版本,其中包含导致此NullPointerException
的编程错误。在C:\test\new
有ButtonTest3
类的不同版本,它不包含此错误,或者可能有ButtonTest
类,它与C:\test
完全不同。
清理你的类路径。在类路径中使用相同的签名来重复使用不同版本的类是不好的。如果你的意图是new
应该是一个包标识符,那么你需要远离类路径。但是,这样的包名会导致编译错误,所以不能这样做。
至于这个bug,对于naildown和fix是比较微不足道的。首先看堆栈跟踪的第一行:
at ButtonFrame.makeButton(ButtonTest3.java:42)
它告诉它已经发生了ButtonTest3
班线42条,makeButton()
方法内。现在转到行ButtonTest3.java
42,它会看起来像:
someObject.doSomething();
看看那里有一个点运算符.
是被用来调用一个方法或访问某些对象的字段。 NullPointerException
表示在特定时刻someObject
为null
。没有实例!
这是一个简单的办法:只要确保它不null
你是在调用的瞬间/访问它:
someObject = new SomeObject();
// ...
someObject.doSomething();
嗯,我不相信你可以在一个源文件中定义两个类。你可以将它们定义为一个子类。
按照Java spec:
class
每个文件包含一个类或接口 的 定义。虽然类或 界面不需要有一个外部 表示字面上包含在 文件(例如,因为是由类加载器所产生的 类), 我们将通俗是指一类或 的任何 有效表示界面,如class
文件 format.format。
您可以将放入ButtonTest2
的内部。
public class ButtonTest2
{
public static void main(String[] args)
{
...
ButtonFrame frame = new ButtonFrame();
}
class ButtonFrame extends JFrame {
....
}
}
或者,把它们放在不同的java文件中。
你必须在程序顶层两班,那是错误的。但是要保持这一点,你的程序不会在第一时间被编译。 成功编译程序使用以下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
环境变量。 并再试一次。
我正在使用我在互联网上发现的3行脚本,但觉得它不能正常工作, 现在与我们的脚本它真的工作! – CHEMlSTRY 2010-09-26 04:10:16
需要一段时间来思考,但最后我得到了它:) – CHEMlSTRY 2010-09-26 05:06:05
不客气。 – BalusC 2010-09-26 05:19:44