简单 java swing 程序不是 运行 并且显示异常
Simple java swing program not running and showing exception
我试过运行这个程序:
import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true);
}
}
并得到了这个堆栈跟踪:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-16-openjdk-amd64/lib/libawt_xawt.so
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2387)
at java.base/java.lang.Runtime.load0(Runtime.java:746)
at java.base/java.lang.System.load(System.java:1857)
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:383)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:227)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:169)
at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:310)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:280)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2392)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:808)
at java.base/java.lang.System.loadLibrary(System.java:1893)
at java.desktop/java.awt.Toolkit.run(Toolkit.java:1389)
at java.desktop/java.awt.Toolkit.run(Toolkit.java:1387)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
at java.desktop/java.awt.Toolkit.loadLibraries(Toolkit.java:1386)
at java.desktop/java.awt.Toolkit.<clinit>(Toolkit.java:1419)
at java.desktop/java.awt.Component.<clinit>(Component.java:622)
at com.masud.HelloSwing.main(HelloSwing.java:6)
我正在使用 ubuntu 20.04 和 openjdk16。看起来库文件 missing.what 是我最好的做法吗?
你有 openJDK 16 headless 吗?它可能缺少此库或您的安装已损坏并且未安装此库。
找出哪个 jdk 有 libawt_xawt 并用它代替。
sudo apt install apt-file
sudo apt-file update
apt-file search libawt_xawt
确保您不依赖 openjdk-16-headless。
如果您 运行 无头,问题可能是由于缺少库引起的。
Headless 将 window 库排除到 A,节省资源和 B,因为它在 cli 中运行并且可能没有监视器。
那么,如果只有 cli,为什么 headless 会有 window 库。
要解决此问题,只需打开一个终端并输入
apt remove openjdk-16-headless -y
apt install openjdk-16 -y
OR
apt install default-jdk default-jre -y
我试过运行这个程序:
import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true);
}
}
并得到了这个堆栈跟踪:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-16-openjdk-amd64/lib/libawt_xawt.so
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2387)
at java.base/java.lang.Runtime.load0(Runtime.java:746)
at java.base/java.lang.System.load(System.java:1857)
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:383)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:227)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:169)
at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:310)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:280)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2392)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:808)
at java.base/java.lang.System.loadLibrary(System.java:1893)
at java.desktop/java.awt.Toolkit.run(Toolkit.java:1389)
at java.desktop/java.awt.Toolkit.run(Toolkit.java:1387)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
at java.desktop/java.awt.Toolkit.loadLibraries(Toolkit.java:1386)
at java.desktop/java.awt.Toolkit.<clinit>(Toolkit.java:1419)
at java.desktop/java.awt.Component.<clinit>(Component.java:622)
at com.masud.HelloSwing.main(HelloSwing.java:6)
我正在使用 ubuntu 20.04 和 openjdk16。看起来库文件 missing.what 是我最好的做法吗?
你有 openJDK 16 headless 吗?它可能缺少此库或您的安装已损坏并且未安装此库。
找出哪个 jdk 有 libawt_xawt 并用它代替。
sudo apt install apt-file
sudo apt-file update
apt-file search libawt_xawt
确保您不依赖 openjdk-16-headless。 如果您 运行 无头,问题可能是由于缺少库引起的。
Headless 将 window 库排除到 A,节省资源和 B,因为它在 cli 中运行并且可能没有监视器。
那么,如果只有 cli,为什么 headless 会有 window 库。
要解决此问题,只需打开一个终端并输入
apt remove openjdk-16-headless -y
apt install openjdk-16 -y
OR
apt install default-jdk default-jre -y