Bertram Nudelbach
Bertram Nudelbach

Reputation: 1841

java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit

I'm working on XUbuntu 13.04 and developing swing applications. As I just wanted to try that application I ran into java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit on startup.

I've found several questions about server/client vms and noticed that I have a server VM and that for Linux 64 there is no client VM anymore. But nevertheless IMHO this problem shouldn't depend on which VM I'm running on.

Has anybody else noticed that problem and has solved it? What am I doing wrong? With 64bit jdk everything works fine, but when I try to use the 32bit jdk the startup fails.

Thanks in advance!

P.S.: Java version is 1.7.0_25 and same with 1.7.0_09

EDIT

When using headless mode, the following exceptions occur:

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)

Upvotes: 23

Views: 109192

Answers (5)

Gabriel Staples
Gabriel Staples

Reputation: 52807

Installing the OpenJDK JRE Java Runtime Environment on Linux Ubuntu

On Ubuntu 22.04, my solution was this:

sudo apt update 
sudo apt install default-jre

Now my run command (which previously caused the error) works!: ./thinkorswim_installer.sh.

I found the sudo apt install default-jre command here: https://ubuntu.com/tutorials/install-jre#2-installing-openjdk-jre. I found it by Googling for "ubuntu install java".

For anyone wondering, I saw the error when trying to install the Charles Schwab / TD Ameritrade ThinkOrSwim desktop app on Linux Ubuntu 22.04. Here is my full run command and error output:

Finances/Charles Schwab$ ./thinkorswim_installer.sh 
Starting Installer ...
An error occurred:
java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
Error log: /tmp/install4jError2805803867045792403.log
java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
    at java.desktop/java.awt.Color.<clinit>(Color.java:275)
    at com.install4j.runtime.installer.frontend.GUIHelper.<clinit>(GUIHelper.java:45)
    at com.install4j.runtime.installer.frontend.headless.AbstractHeadlessScreenExecutor.init(AbstractHeadlessScreenExecutor.java:86)
    at com.install4j.runtime.installer.frontend.headless.ConsoleScreenExecutor.<init>(ConsoleScreenExecutor.java:25)
    at com.install4j.runtime.installer.frontend.headless.InstallerConsoleScreenExecutor.<init>(InstallerConsoleScreenExecutor.java:6)
    at com.install4j.runtime.installer.Installer.getScreenExecutor(Installer.java:84)
    at com.install4j.runtime.installer.Installer.runInProcess(Installer.java:60)
    at com.install4j.runtime.installer.Installer.main(Installer.java:46)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84)
    at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:69)
    at install4j.Installer443923295.main(Unknown Source)

Upvotes: 1

Ashok Parmar
Ashok Parmar

Reputation: 408

java.lang.NoClassDefFoundError: Could not initialize class java.awt.Color com.lowagie.text.Font.setColor(Unknown Source)

On Ubuntu 22.04 using "sudo apt-get install libxtst6:i386" command issue resolved.

Upvotes: 0

wedesoft
wedesoft

Reputation: 2989

Had the missing awt library problem on Ubuntu 20.04. Fixed it by installing openjdk-11-jre:

sudo apt-get install openjdk-11-jre

Upvotes: 27

Eugene
Eugene

Reputation: 11085

Thanks for @Bertram's answer. As a complementary, I met similar issue when I'm using Fedora, for anyone who is using CentOS/Fedora and Redhat, please try yum install libXtst.

Upvotes: 5

Bertram Nudelbach
Bertram Nudelbach

Reputation: 1841

Okay, finally I've found the answer. Thanks for the effort! The problem is that I had libxtst6 installed but only the 64bit-version of it.

sudo apt-get install libxtst6:i386 did the trick for me.

How did I find this answer? I ldded around a bit, but nothing, as you can see in the following:

$ 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

So that was the point when I ended trusting my IDE and started a sample application on the command line. And the command line again was nice to me:

$ 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)

Upvotes: 47

Related Questions