How to resolve Unsupported JavaFX configuration error in SBT while running ScalaFX application?

194 views Asked by At

I'm trying to create a simple racing game in scala using scalaFX. I have a project with one file in src of the following content:

package racing

import scalafx.application.{JFXApp3, Platform}
import scalafx.beans.property.{IntegerProperty, DoubleProperty, ObjectProperty}
import scalafx.scene.Scene
import scalafx.scene.paint.Color
import scalafx.scene.paint.Color._
import scalafx.scene.shape.Rectangle


object RacingFX extends JFXApp3 {
  override def start(): Unit = {
    val speed = DoubleProperty(55)
    stage = new JFXApp3.PrimaryStage {
      title = "ScalaFX Hello World"
      scene = new Scene {
        fill = Color.rgb(38, 38, 38)
        content = new Rectangle {
          x = 100
          y = 100
          width = 20
          height = speed.value
          fill = Green
        }
      }
    }
  }
}

I'm using sbt to build and run project. I do:

  1. sbt
  2. compile
  3. run On the first run the projects launches successfully, I see the window with a rectangle. The output in the sbt console is:
sbt:scalaracing> run
[info] running racing.RacingFX 
May 25, 2023 6:37:12 PM com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @3ea64b56'
[success] Total time: 12 s, completed May 25, 2023, 6:37:22 PM
sbt:scalaracing> 

But when I do it again I get an error

sbt:scalaracing> run
[info] running racing.RacingFX 
May 25, 2023 6:39:29 PM com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @7d7f16fd'
Loading library prism_es2 from resource failed: java.lang.UnsatisfiedLinkError: Native Library /home/ivan/.openjfx/cache/16/libprism_es2.so already loaded in another classloader
java.lang.UnsatisfiedLinkError: Native Library /home/ivan/.openjfx/cache/16/libprism_es2.so already loaded in another classloader
        at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2471)
        at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2700)
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2630)
        at java.base/java.lang.Runtime.load0(Runtime.java:768)
        at java.base/java.lang.System.load(System.java:1837)
        at com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(NativeLibLoader.java:214)
        at com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(NativeLibLoader.java:194)
        at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:135)
        at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:53)
        at com.sun.prism.es2.ES2Pipeline.lambda$static$0(ES2Pipeline.java:69)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at com.sun.prism.es2.ES2Pipeline.<clinit>(ES2Pipeline.java:51)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:218)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        at java.base/java.lang.Thread.run(Thread.java:829)
Loading library glass from resource failed: java.lang.UnsatisfiedLinkError: Native Library /home/ivan/.openjfx/cache/16/libglass.so already loaded in another classloader
java.lang.UnsatisfiedLinkError: Native Library /home/ivan/.openjfx/cache/16/libglass.so already loaded in another classloader
        at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2471)
        at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2700)
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2630)
        at java.base/java.lang.Runtime.load0(Runtime.java:768)
        at java.base/java.lang.System.load(System.java:1837)
        at com.sun.glass.utils.NativeLibLoader.installLibraryFromResource(NativeLibLoader.java:214)
        at com.sun.glass.utils.NativeLibLoader.loadLibraryFromResource(NativeLibLoader.java:194)
        at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:135)
        at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:53)
        at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:110)
        at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:118)
        at com.sun.glass.ui.gtk.GtkApplication.lambda$static$2(GtkApplication.java:109)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at com.sun.glass.ui.gtk.GtkApplication.<clinit>(GtkApplication.java:108)
        at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
        at com.sun.glass.ui.Application.run(Application.java:144)
        at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:280)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:288)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:160)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:829)
[error] java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: no glass in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib]
[error]         at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:290)
[error]         at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:288)
[error]         at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:160)
[error]         at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
[error]         at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
[error]         at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
[error]         at java.base/java.lang.Thread.run(Thread.java:829)
[error] Caused by: java.lang.UnsatisfiedLinkError: no glass in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib]
[error]         at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2673)
[error]         at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
[error]         at java.base/java.lang.System.loadLibrary(System.java:1873)
[error]         at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:163)
[error]         at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:53)
[error]         at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:110)
[error]         at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:118)
[error]         at com.sun.glass.ui.gtk.GtkApplication.lambda$static$2(GtkApplication.java:109)
[error]         at java.base/java.security.AccessController.doPrivileged(Native Method)
[error]         at com.sun.glass.ui.gtk.GtkApplication.<clinit>(GtkApplication.java:108)
[error]         at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
[error]         at com.sun.glass.ui.Application.run(Application.java:144)
[error]         at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:280)
[error]         at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:288)
[error]         at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:160)
[error]         at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
[error]         at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
[error]         at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
[error]         at java.base/java.lang.Thread.run(Thread.java:829)
[error] stack trace is suppressed; run last Compile / run for the full output
[error] (Compile / run) java.lang.UnsatisfiedLinkError: no glass in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib]
[error] Total time: 1 s, completed May 25, 2023, 6:39:29 PM
sbt:scalaracing> 

How can I fix this? Or mb it is a better way to launch your applications? I'm using VSCode and ubuntu 20.04.

I expected the same result on every run command.

0

There are 0 answers