SWT 在 java 的不同版本上运行

SWT runs on a different version of java

首先,我对 Java 知之甚少,对 SWT 知之甚少,所以请多多包涵。今天早些时候,我尝试 运行 我在 https://mkyong.com/swt/swt-hello-world-example

上找到的这个简单程序

代码如下:

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class SWTHelloWorld {

public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell(display);
    
    Text helloWorldTest = new Text(shell, SWT.NONE);
    helloWorldTest.setText("Hello World SWT");
    helloWorldTest.pack();
    
    shell.pack();
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}

当我 运行 它时,我得到这个错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/swt/widgets/Composite has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

据我了解,SWT 正在使用 Java 11 进行编译,而它应该使用 Java 8 进行编译,但是 - 这是一个很大的问题 - 我没有 Java 11 我删除它只有 Java 8 并且避免了这种问题。 当我在我的终端中 运行 命令 java -version 和 javac -version 在这两种情况下我得到这个版本 '1.8.0_331' 并且没有别的。我还在 Eclipse 中检查了我的设置和配置,一切似乎都设置为 Java 8 上的 运行。最终我在终端 javac -target 1.8.0_331 SWTHelloWorld.java 中尝试了这个命令来定位正确的编译器,但我得到 javac: invalid target release: 1.8.0_331。我不知道从那里去哪里。有人吗?

提前谢谢大家!

PS:如果重要的话,我正在使用 macOS Big Sur 11.4。

卸载 Java 11 不会更改 SWT 本身的编译版本。您的应用程序至少需要 Java 11,因为您正在使用的库 SWT 需要它。