为了让它脱离我完整的n00b的方式,我在这里学习java
ide:intellij
问题:我成功地将acm库导入了我的项目,但是当我运行一个简单的测试程序时出现了这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class FormPreviewFrame
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:259)
at acm.util.JTFTools.readMainClassFromClassPath(JTFTools.java:1092)
at acm.util.JTFTools.getMainClass(JTFTools.java:461)
at acm.program.Program.main(Program.java:1320)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
这是我的计划:
import acm.program.*;
public class hello extends ConsoleProgram{
public void run(){
println("Hello World");
}
}
我知道这很简单,但我只是在测试它是否适用于intellij但是它会发出错误。
答案 0 :(得分:2)
尝试添加此内容:
public static void main(String[] args) {
new hello().start(args);
}
整个程序看起来像:
import acm.program.*;
public class hello extends ConsoleProgram{
public void run(){
println("Hello World");
}
public static void main(String[] args) {
new hello().start(args);
}
}
答案 1 :(得分:0)
如果您没有main方法,库将通过各种方法搜索主类。您的案例失败的方法是“readFromClassPath”。这将打开类路径上的所有JAR,并查找具有main-class条目的Manifest。看起来这与IDE不兼容。
由于教程没有描述这个,你没有提到你正确设置它我觉得它只是找错了。
如果你保留main()它应该工作(也许不行,我不清楚图书馆是如何工作的。它肯定是在整个地方使用非标准方法)。如果main方法没有帮助,它似乎遵循这样的系统属性:-Djava.main=hello
答案 2 :(得分:0)
我也击中了
我不完全了解发生了什么,但是对于Karel来说,解决方案很简单。
catch (Exception ex)
,但无任何作用。添加另一个catch
子句以捕获NoClassDefFoundError
。javac Karel.java
jar cf spl.jar *
对JTFTools
执行相同的操作。我的spl.jar
没有来源,但是您可以在https://cs.stanford.edu/people/eroberts/jtf/上找到它。