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:
- sbt
- compile
- 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.