【问题标题】:Cannot compile when importing Processing library into eclipse将处理库导入eclipse时无法编译
【发布时间】:2017-11-17 05:02:56
【问题描述】:

我正在尝试使用 Eclipse 中的处理库构建程序。该过程应该相对简单,但我什至无法编译一个空的处理程序。我认为问题可能与我的类路径有关,我不确定。我曾尝试在 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 并重新安装了它,但没有任何区别。对此问题的任何帮助将不胜感激,我似乎无法在网上找到其他人遇到完全相同的问题。

【问题讨论】:

  • 看起来您的 Eclipse 安装的 JRE 设置错误。
  • @chrylis 我将如何解决这个问题?我只需要让 Eclipse 指向 JRE 的正确位置吗?

标签: java eclipse compiler-errors processing


【解决方案1】:

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

【讨论】:

  • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
  • 既然我已经回答了这个问题,请您删除这条评论吗?
  • 谢谢@A.Greyson,你真的帮了我这个忙
【解决方案2】:

我的 Mac 上的 Eclipse 项目也遇到了完全相同的问题。 但是处理应用程序本身可以很好地编译。 所以我在处理应用程序内容中查找并找到它使用的jdk(位于 Processing/Contents/Plugins/ ) 所以我把它用作我的项目的 jdk,它工作了!

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

【讨论】:

    【解决方案3】:
    java.lang.NoClassDefFoundError: com/apple/eawt/QuitHandler
    

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

    在四处挖掘之后,我发现内部的 Mac API 处理已被滥用以添加适当的退出处理程序并设置 停靠图标现在已被官方 AWT APIS 删除并取代。 Processing 里面有一个类叫做 ThinkDifferent,它是 当检测到 Mac 并且此类正在调用时通过反射加载 现在删除的 API。为了解决这个问题,我使用重新实现了这个类 新的官方 API 并且刚刚添加了一个新的 processing.core.ThinkDifferent 类到我的项目解决了 问题。

    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);
      }
    }
    

    【讨论】:

    • 好主意!!
    【解决方案4】:

    我什至无法编译一个空的处理程序。

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

    无论如何,就像chrylis mentioned,这是因为你的类路径不正确。如何解决这个问题取决于您使用的 IDE,但在 Eclipse 中,您可以右键单击您的项目,然后单击属性,然后转到左侧的 Java Build Path 部分。然后转到Libraries 选项卡并添加处理罐子。

    我猜你已经添加了core.jar,这是编译代码所需的全部内容。但是由于您在 Mac 上运行,因此您还需要 Mac 特定的 jar。您必须查看 Processing 安装目录。抱歉,我不能更具体,但我没有 Mac。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多