web-dev-qa-db-ja.com

Linux "javafx / application / Application"でJarを起動します

システム情報は次のとおりです。

Sudo update-alternatives --config Java

 Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/Java-11-openjdk-AMD64/bin/Java      1111      auto mode
* 1            /usr/lib/jvm/Java-11-openjdk-AMD64/bin/Java      1111      manual mode
  2            /usr/lib/jvm/Java-8-openjdk-AMD64/jre/bin/Java   1081      manual mode

Linuxバージョンは次のとおりです。

cat /proc/version
Linux version 4.19.0-kali3-AMD64 ([email protected]) (gcc version 8.2.0 (Debian 8.2.0-16)) #1 SMP Debian 4.19.20-1kali1 (2019-02-14)

Javaバージョン:

Java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Debian-3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Debian-3, mixed mode, sharing)

.jarを実行しようとしたときのエラー:

Java -jar any_game.jar 
Exception in thread "main" Java.lang.NoClassDefFoundError: javafx/application/Application
        at Java.base/Java.lang.ClassLoader.defineClass1(Native Method)
        at Java.base/Java.lang.ClassLoader.defineClass(ClassLoader.Java:1016)
        at Java.base/Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:174)
        at Java.base/Java.net.URLClassLoader.defineClass(URLClassLoader.Java:550)
        at Java.base/Java.net.URLClassLoader$1.run(URLClassLoader.Java:458)
        at Java.base/Java.net.URLClassLoader$1.run(URLClassLoader.Java:452)
        at Java.base/Java.security.AccessController.doPrivileged(Native Method)
        at Java.base/Java.net.URLClassLoader.findClass(URLClassLoader.Java:451)
        at Java.base/Java.lang.ClassLoader.loadClass(ClassLoader.Java:588)
        at Java.base/Java.lang.ClassLoader.loadClass(ClassLoader.Java:521)
        at Java.base/Java.lang.Class.forName0(Native Method)
        at Java.base/Java.lang.Class.forName(Class.Java:398)
        at org.Eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.Java:56)
Caused by: Java.lang.ClassNotFoundException: javafx.application.Application
        at Java.base/Java.net.URLClassLoader.findClass(URLClassLoader.Java:471)
        at Java.base/Java.lang.ClassLoader.loadClass(ClassLoader.Java:588)
        at Java.base/Java.lang.ClassLoader.loadClass(ClassLoader.Java:521)
        ... 13 more

Javaバージョンを変更しようとしましたが、機能しませんでした。

3
Ja Bush

これを回避する別の方法は次のとおりです。

  • openjfxパッケージをインストールする
  • jarを次のように実行します。
Java --module-path /usr/share/openjfx/lib --add-modules=javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web -jar jarFile.jar
1
dantefff

JavaFXアプリケーションをサポートするには、openjfxpackageをインストールする必要があります。libopenjfx-Javalibopenjfx-jniなどのライブラリもインストールする必要があります。多分あなたはCLASSPATHにパスを追加する必要があるでしょう

export CLASSPATH=$CLASSPATH:/usr/share/Java/openjfx/lib/
1
Romeo Ninov