【问题标题】:java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkitjava.lang.NoClassDefFoundError:无法初始化类 java.awt.Toolkit
【发布时间】:2013-08-08 14:33:59
【问题描述】:

我正在开发 XUbuntu 13.04 并开发 Swing 应用程序。因为我只是想试试那个应用程序,所以我在启动时遇到了java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit

我发现了几个关于服务器/客户端虚拟机的问题,并注意到我有一个服务器虚拟机,而对于 Linux 64,已经没有客户端虚拟机了。但是恕我直言,这个问题不应该取决于我在哪个虚拟机上运行。

有其他人注意到这个问题并解决了吗?我究竟做错了什么?使用 64 位 jdk 一切正常,但是当我尝试使用 32 位 jdk 时启动失败。

提前致谢!

P.S.: Java 版本是1.7.0_251.7.0_09一样

编辑

使用无头模式时,会出现以下异常:

java.lang.reflect.InvocationTargetException
    at java.awt.EventQueue.invokeAndWait(EventQueue.java:1272)
    at java.awt.EventQueue.invokeAndWait(EventQueue.java:1247)
    at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1349)
    at Main.main(Main.java:218)
Caused by: java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
    at java.awt.Window.<init>(Window.java:535)
    at java.awt.Frame.<init>(Frame.java:420)
    at java.awt.Frame.<init>(Frame.java:385)
    at javax.swing.JFrame.<init>(JFrame.java:180)
    at ..MyFrame.<init>(MyFrame.java:23)

【问题讨论】:

  • 可能是here描述的问题
  • 我考虑过这个选项,但是-Djava.awt.headless=true 有几个HeadlessExceptions。此选项是否也适用于 Swing 应用程序?
  • 异常是否与here所描述的相似?
  • 类似,但没有 X11 的消息。
  • 更多替代品here.

标签: java linux swing 32bit-64bit xubuntu


【解决方案1】:

好的,我终于找到了答案。感谢您的努力!问题是我安装了libxtst6,但只有 64 位版本。

sudo apt-get install libxtst6:i386 成功了。

我是如何找到这个答案的?我ldded 了一点,但什么也没有,如下所示:

$ ldd jdk1.7.0_25_x86/jre/lib/i386/xawt/libmawt.so
    linux-gate.so.1 =>  (0xf7769000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf76ee000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf76c2000)
    libawt.so => jdk1.7.0_25_x86/jre/lib/i386/xawt/../libawt.so (0xf760f000)
    libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf75fd000)
    libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf74c9000)
    libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xf74bf000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf74ba000)
    libXtst.so.6 => /usr/lib/i386-linux-gnu/libXtst.so.6 (0xf74b2000)
    libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf74a2000)
    libjava.so => jdk1.7.0_25_x86/jre/lib/i386/xawt../libjava.so (0xf747e000)
    libjvm.so => not found
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf72d5000)
    /lib/ld-linux.so.2 (0xf776a000)
    libjvm.so => not found
    libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf72b3000)
    libjvm.so => not found
    libverify.so => java/jdk1.7.0_25_x86/jre/lib/i386/xawt/../libverify.so (0xf72a7000)
    libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf72a2000)
    libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf729b000)
    libjvm.so => not found

这就是我不再信任我的 IDE 并在命令行上启动示例应用程序的时候。命令行再次对我很好:

$ jdk1.7.0_25_x86/bin/java Main
Exception in thread "main" java.lang.UnsatisfiedLinkError: jdk1.7.0_25_x86/jre/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1957)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1882)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1843)
    at java.lang.Runtime.load0(Runtime.java:795)
    at java.lang.System.load(System.java:1061)
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1957)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1882)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1087)
    at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:67)
    at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:47)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.loadLibraries(Toolkit.java:1646)
    at java.awt.Toolkit.<clinit>(Toolkit.java:1668)
    at java.awt.Component.<clinit>(Component.java:595)
    at Main.main(Main.java:5)

【讨论】:

  • 这个已修复的问题:Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
  • 我错过了另一个图书馆,但您的评论帮助指导了我,谢谢!对我来说,缺少的是 libxi6:i386。
【解决方案2】:

在 Ubuntu 20.04 上遇到了缺少 awt 库的问题。通过安装 openjdk-11-jre 修复它:

sudo apt-get install openjdk-11-jre

【讨论】:

  • 谢谢,这对我有用:) 显然对于openjdk-XX-jre,应该为XX 指定正确的版本。
【解决方案3】:

感谢@Bertram 的回答。作为补充,我在使用 Fedora 时遇到了类似的问题,对于使用 CentOS/Fedora 和 Redhat 的任何人,请尝试yum install libXtst

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 2020-09-27
    • 2012-08-26
    • 2015-10-29
    • 2017-09-12
    • 2016-07-07
    • 2018-08-01
    • 2010-12-29
    相关资源
    最近更新 更多