n4mlz / IcedTea-Docker

Run Java Web Start apps in Docker with GUI support
4 stars 1 forks source link

KVM jnlp execution error "Could not initialize class sun.awt.X11.XToolkit" #2

Open Skylinar opened 1 month ago

Skylinar commented 1 month ago

I'm trying to execute a kvm.jnlp file generated from my Avocent DSR 2020 KVM switch:

<?xml version="1.0" encoding="utf-8"?>

<!-- JNLP File for Java Video Viewer Application -->

<jnlp spec="1.0+" codebase="http://192.168.0.11/webstart2">
   <information>
      <title>Video Session Viewer</title>
      <vendor>Avocent</vendor>
      <description>Video Session Viewer</description>
      <description kind="short">Video Viewer</description>
   </information>

   <security>
      <all-permissions/>
   </security>

   <resources>
      <j2se version="1.5+"/>

      <jar href="avctVideo.jar"/>
      <jar href="avctVM.jar"/>
      <nativelib href="avctWin32Lib.jar"/>
      <nativelib href="avmWin32Lib.jar"/>
      <nativelib href="avctLinuxLib.jar"/>
      <nativelib href="avmLinuxLib.jar"/>
      <nativelib href="avctSolarisLib.jar"/>
      <nativelib href="avmSolarisLib.jar"/>
      <nativelib href="avctMacOSXLib.jar"/>
      <nativelib href="avmMacOSXLib.jar"/>
      <nativelib href="jpcscdll.jar"/>
      <nativelib href="jpcscso.jar"/>
   </resources>

   <application-desc main-class="com.avocent.video.Stingray">
      <argument>title="Avocent DSR2020 - R330"</argument>
      <argument>devicetype=avsp</argument>
      <argument>path=a:192.168.0.11,p:1,c:0,s:"Video Viewer - R330",l:30</argument>
      <argument>oem=Avocent</argument>
      <argument>user=XXXXXXX</argument>
      <argument>password=XXXXXXXX</argument>
   </application-desc>
</jnlp>

This ends up in following error:

user@44bb19ee7cc5:~$ javaws ~/files/kvm.jnlp 
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at java.desktop/java.awt.Toolkit$2.run(Toolkit.java:588)
        at java.desktop/java.awt.Toolkit$2.run(Toolkit.java:583)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:582)
        at java.desktop/javax.swing.UIManager.getSystemLookAndFeelClassName(UIManager.java:661)
        at java.desktop/net.sourceforge.jnlp.runtime.JNLPRuntime.initialize(JNLPRuntime.java:221)
        at java.desktop/net.sourceforge.jnlp.runtime.Boot.init(Boot.java:349)
        at java.desktop/net.sourceforge.jnlp.runtime.JnlpBoot.run(JnlpBoot.java:58)
        at java.desktop/net.sourceforge.jnlp.runtime.Boot.run(Boot.java:270)
        at java.desktop/net.sourceforge.jnlp.runtime.Boot.run(Boot.java:63)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.desktop/net.sourceforge.jnlp.runtime.Boot.main(Boot.java:210)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at java.desktop/java.awt.Toolkit$2.run(Toolkit.java:588)
        at java.desktop/java.awt.Toolkit$2.run(Toolkit.java:583)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:582)
        at java.desktop/java.awt.Toolkit.getEventQueue(Toolkit.java:1494)
        at java.desktop/java.awt.EventQueue.invokeLater(EventQueue.java:1312)
        at java.desktop/net.sourceforge.swing.SwingUtils.invokeLater(SwingUtils.java:137)
        at java.desktop/net.sourceforge.jnlp.util.logging.JavaConsole.updateModel(JavaConsole.java:544)
        at java.desktop/net.sourceforge.jnlp.util.logging.JavaConsole.updateModel(JavaConsole.java:538)
        at java.desktop/net.sourceforge.jnlp.util.logging.JavaConsole.addMessage(JavaConsole.java:534)
        at java.desktop/net.sourceforge.jnlp.util.logging.OutputController.consume(OutputController.java:154)
        at java.desktop/net.sourceforge.jnlp.util.logging.OutputController.flush(OutputController.java:138)
        at java.desktop/net.sourceforge.jnlp.util.logging.OutputController$1.run(OutputController.java:243)
        at java.base/java.lang.Thread.run(Thread.java:829)
user@44bb19ee7cc5:~$ java -version
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment (build 11.0.24+8-post-Ubuntu-1ubuntu322.04)
OpenJDK 64-Bit Server VM (build 11.0.24+8-post-Ubuntu-1ubuntu322.04, mixed mode)

Do you have an idea?

n4mlz commented 1 month ago

I apologize for the delayed response.

Since I do not own a Mac OS, I am not very familiar with this issue. However, it appears that Java is complaining that it cannot find the sun.awt.X11.XToolkit class.

The IcedTea-Docker setup is forwarding the container's application to the host's X11 server, but on Mac OS there may not be an X11 server, which could be causing this error.

It's also possible that Java is unable to find the X server inside the container. In this case, the stackoverflow question you referenced may be helpful:

https://stackoverflow.com/questions/14412728/could-not-initialize-class-sun-awt-x11-xtoolkit

Please let me know if you have any further updates. I apologize that I could not be of more assistance.