【问题标题】:Simple java swing program not running and showing exception简单的 java swing 程序未运行并显示异常
【发布时间】:2021-07-01 10:31:21
【问题描述】:

我试图运行这个程序:

 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$2.run(Toolkit.java:1389)
    at java.desktop/java.awt.Toolkit$2.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。似乎缺少一个库文件。我最好的做法是什么?

【问题讨论】:

    标签: java swing unsatisfiedlinkerror


    【解决方案1】:

    确保您不依赖 openjdk-16-headless。 如果您在 headless 上运行,问题可能是由于缺少库引起的。

    Headless 将窗口库排除给 A,节省资源和 B,因为它在 cli 中运行并且可能没有监视器。

    如果只有 cli,为什么 headless 会有窗口库。

    要解决此问题,只需打开终端并输入

    apt remove openjdk-16-headless -y
    
    apt install openjdk-16 -y
    
    OR
    
    apt install default-jdk default-jre -y
    

    【讨论】:

    • 它是无头的。感谢您的回答。我刚刚使用 apt install openjdk-16 安装了 openjdk 16,问题就消失了。
    【解决方案2】:

    你有 openJDK 16 无头吗?可能缺少此库或您的安装已损坏且未安装此库。

    找出哪个 jdk 有 libawt_xawt 并改用它。

    sudo apt install apt-file
    sudo apt-file update
    apt-file search libawt_xawt
    

    【讨论】:

    • 所以你认为它可能是安装 OpenJDK 的 headless 变体(用于非 GUI 服务器)?
    • 是的@JoopEggen 或损坏的安装,但大多数情况下,无头 jdk 16 没有此库
    • 是的,它是无头的。我现在明白了。谢谢stackoverflow.com/users/7064617/susan-mustafa
    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多