Java运行时错误:"无法初始化类FormPreviewFrame"

时间:2015-01-21 02:34:14

标签: java

为了让它脱离我完整的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但是它会发出错误。

3 个答案:

答案 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来说,解决方案很简单。

  • 提取spl.jar(解压缩)
  • 修改Karel.java。您会发现一行catch (Exception ex),但无任何作用。添加另一个catch子句以捕获NoClassDefFoundError
  • javac Karel.java
  • jar cf spl.jar *

JTFTools执行相同的操作。我的spl.jar没有来源,但是您可以在https://cs.stanford.edu/people/eroberts/jtf/上找到它。