将Processing库导入eclipse时无法编译

时间:2017-11-17 05:02:57

标签: java eclipse compiler-errors processing

我正在尝试使用eclipse中的Processing库构建一个程序。这个过程应该相对简单,但我甚至无法编译一个空的处理程序。我认为问题可能与我的课程路径有关,我不确定。我试图导入处理库并在Eclipse和IntelliJ上多次编写简单程序而没有运气。

这是该计划:

import processing.core.PApplet;

public class Processing extends PApplet {

   public static void main(String[] args) {
       PApplet.main("Processing", args);

   }
}

这些是我得到的错误:

java.lang.NoClassDefFoundError: com/apple/eawt/QuitHandler
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3139)
    at java.base/java.lang.Class.getMethodsRecursive(Class.java:3280)
    at java.base/java.lang.Class.getMethod0(Class.java:3266)
    at java.base/java.lang.Class.getMethod(Class.java:2063)
    at processing.core.PApplet.runSketch(PApplet.java:10716)
    at processing.core.PApplet.main(PApplet.java:10513)
    at Processing.main(Processing.java:6)
Caused by: java.lang.ClassNotFoundException: com.apple.eawt.QuitHandler
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 8 more

我已经卸载了java JDK并重新安装了它,但它并没有什么区别。对此问题的任何帮助将不胜感激,我似乎无法在网上找到其他任何完全相同的问题。

4 个答案:

答案 0 :(得分:4)

升级到JDK 9之后我遇到了完全相同的问题。我在这里报告了它是一个问题(https://github.com/processing/processing/issues/5371),并收到确认处理3与v9不兼容的确认。目前,唯一的解决方法是降级到v8。

答案 1 :(得分:1)

我在Mac上使用eclipse项目时遇到了完全相同的问题。 但是处理应用程序本身就可以编译。 因此,我在处理应用程序内容时进行了查找,找到了它使用的jdk(位于Processing / Contents / Plugins /中) 因此,我将其用作我的项目的jdk并成功了!

(我还安装了core.jar内容(由Keka打开)中指定的必需库(opengl的库))

答案 2 :(得分:0)

  

我甚至无法编译空处理程序。

这不是编译器错误。这是运行时错误。

无论如何,就像chrylis mentioned一样,这是因为你的类路径不正确。你如何解决这个问题取决于你正在使用哪个IDE,但是在eclipse中你可以右键单击你的项目,然后点击属性,然后转到左边的Java Build Path部分。然后转到Libraries标签并添加Processing jars。

我的猜测是你添加了core.jar,这就是编译代码所需的全部内容。但是,既然你在Mac上运行,你也需要Mac专用的jar。您必须查看Processing安装目录。对不起,我不能更具体,但我没有Mac。

答案 3 :(得分:0)

java.lang.NoClassDefFoundError: com/apple/eawt/QuitHandler

Means Processing 不能再使用内部的 MacOS API,所以我在 Processing 论坛上找到了,为我解决了问题。

<块引用>

经过深入研究,我发现 Mac 内部的 API 处理已被滥用以添加适当的退出处理程序并设置 停靠栏图标现已被移除并由官方 AWT APIS 取代。 Processing 中有一个名为 ThinkDifferent 的类,它是 当检测到 Mac 并且这个类正在调用时通过反射加载 现在删除的 API。为了解决这个问题,我使用重新实现了这个类 新的官方 API 并刚刚添加了一个新的 processing.core.Think 与我的项目不同的类解决了 问题。

package processing.core;

import java.awt.Desktop;
import java.awt.Image;
import java.awt.Taskbar;
import java.awt.desktop.QuitEvent;
import java.awt.desktop.QuitHandler;
import java.awt.desktop.QuitResponse;

public class ThinkDifferent {

  // True if user has tried to quit once. Prevents us from cancelling the quit
  // call if the sketch is held up for some reason, like an exception that's
  // managed to put the sketch in a bad state.
  static boolean attemptedQuit;

  public static void init(final PApplet sketch) {
    Desktop desktop = Desktop.getDesktop();
    desktop.setQuitHandler(
        new QuitHandler() {
          @Override
          public void handleQuitRequestWith(QuitEvent e, QuitResponse response) {
            sketch.exit();
            if (PApplet.uncaughtThrowable == null && !attemptedQuit) {
              response.cancelQuit();
              attemptedQuit = true;
            } else {
              response.performQuit();
            }
          }
        });
  }

  public static void cleanup() {
    Desktop.getDesktop().setQuitHandler(null);
  }

  // Called via reflection from PSurfaceAWT and others
  public static void setIconImage(Image image) {
    Taskbar.getTaskbar().setIconImage(image);
  }
}
相关问题