簡體   English   中英

將處理庫導入 eclipse 時無法編譯

[英]Cannot compile when importing Processing library into eclipse

我正在嘗試使用 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 並重新安裝了它,但它沒有任何區別。 對此問題的任何幫助將不勝感激,我似乎無法在網上找到任何其他人遇到完全相同的問題。

升級到 JDK 9 后,我遇到了完全相同的問題。我在此處將其報告為問題( https://github.com/processing/processing/issues/5371 ),並收到確認處理 3 與 v9 不兼容。 目前,唯一的解決方法是降級到 v8。

我在 Mac 上使用 eclipse 項目遇到了完全相同的問題。 但是處理應用程序本身編譯得很好。 所以我查找了處理應用程序內容並找到了它使用的 jdk(位於 Processing/Contents/Plugins/ )所以我將它用作我的項目的 jdk 並且它起作用了!

(我還安裝了 core.jar 內容中指定的所需庫(opengl 的)(用 Keka 打開))

我什至無法編譯一個空的處理程序。

這不是編譯器錯誤。 這是一個運行時錯誤。

無論如何,就像提到的 chrylis ,這是因為您的類路徑不正確。 如何解決此問題取決於您使用的是哪個 IDE,但在 eclipse 中,您將右鍵單擊您的項目,然后單擊屬性,然后轉到左側的Java Build Path部分。 然后轉到Libraries選項卡並添加處理罐。

我的猜測是您已經添加了core.jar ,這是編譯代碼所需的全部內容。 但由於您在 Mac 上運行,因此您還需要 Mac 特定的 jar。 您必須查看 Processing 安裝目錄。 對不起,我不能更具體,但我沒有 Mac。

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

意味着處理不能再使用內部 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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM