beatoraja icon indicating copy to clipboard operation
beatoraja copied to clipboard

Fixed: Ref #824: Unable to launch beatoraja 0.8.8 with JavaFX problems.

Open djx314 opened this issue 1 year ago • 4 comments

  1. Problem:

Though JavaFX is removed from JDK since Java11 and Java11+. Now it's a common maven dependency in (https://repo1.maven.org/maven2/org/openjfx/). beatoraja can not start with beatoraja0.8.8-modernchic.

E:\d\games\bms-install\beatoraja0.8.8-modernchic> .\beatoraja-config.bat

E:\d\games\bms-install\beatoraja0.8.8-modernchic>REM *** Set system-wide "_JAVA_OPTIONS" environment variable to use OpenGL pipeline (improved performance of > 30 potentially. Also use anti-aliasing for non-LR2 fonts, and finally allow Swing framework to utilize AA and GTKLookAndFeel for config window. ***

E:\d\games\bms-install\beatoraja0.8.8-modernchic>set _JAVA_OPTIONS='-Dsun.java2d.opengl=true -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'

E:\d\games\bms-install\beatoraja0.8.8-modernchic>pushd E:\d\games\bms-install\beatoraja0.8.8-modernchic\

E:\d\games\bms-install\beatoraja0.8.8-modernchic>java -Xms1g -Xmx4g -jar beatoraja.jar
Picked up _JAVA_OPTIONS: '-Dsun.java2d.opengl=true -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
错误: 找不到或无法加载主类 bms.player.beatoraja.MainLoader
原因: java.lang.NoClassDefFoundError: javafx/application/Application

E:\d\games\bms-install\beatoraja0.8.8-modernchic>popd
PS E:\d\games\bms-install\beatoraja0.8.8-modernchic>
  1. Workaround:

Download JavaFX and OpenJDK, then change

java -Xms1g -Xmx4g -jar beatoraja.jar

in beatoraja0.8.8-modernchic/beatoraja-config.bat

// === Step 1

Get JDK: Use JBR

D:\f\tools\idea\jbr\bin> java -version
openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment JBR-17.0.11+1-1207.30-jcef (build 17.0.11+1-b1207.30)
OpenJDK 64-Bit Server VM JBR-17.0.11+1-1207.30-jcef (build 17.0.11+1-b1207.30, mixed mode)

So just copy IntellIJ-IDEA/jbr/ to e:/d/games/bms-install/jbr-jdk17/

// === Step 2

JavaFX:
Go to https://openjfx.io/ and click DOWNLOAD, then link to https://gluonhq.com/products/javafx/ 图片 ↑ Select the element like the picture.

  1. Be Careful: JavaFX Version is the same as your JDK Version, so here select 17.x.x
  2. Type Select to SDK is OK.

Downlad, unzip, and put it to e:/d/games/bms-install/javafx-sdk-17.0.13/

// === Step 3

Now the directory is:

+- bms-install/
    +- beatoraja0.8.8-modernchic/
        +- beatoraja.jar
        +- beatoraja-config.bat
        +- bgm/
        +- course/
        +- // other files and directories
    +- jbr-jdk17/
        +- bin/
            +- java.exe
        +- conf/
        +- include/
        +- // other files and directories
    +- javafx-sdk-17.0.13/
        +- bin/
        +- legal/
        +- lib/
        +- src.zip

Then change the line

java -Xms1g -Xmx4g -jar beatoraja.jar

in bms-install/beatoraja0.8.8-modernchic/beatoraja-config.bat to

"../jbr-jdk17/bin/java" -Xms1g -Xmx4g --module-path "../javafx-sdk-17.0.13/lib/" --add-modules javafx.controls --add-modules javafx.fxml -jar beatoraja.jar

Now we can play beatoraja0.8.8-modernchic/beatoraja-config.bat as same as beatoraja0.8.8-jre-win64/beatoraja.exe without change any global environment and using any OpenJDK (Of course JDK17+) you like.

Here is the completed file of bms-install/beatoraja0.8.8-modernchic/beatoraja-config.bat

REM *** Set system-wide "_JAVA_OPTIONS" environment variable to use OpenGL pipeline (improved performance of > 30% potentially. Also use anti-aliasing for non-LR2 fonts, and finally allow Swing framework to utilize AA and GTKLookAndFeel for config window. ***
set _JAVA_OPTIONS='-Dsun.java2d.opengl=true -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
pushd %~dp0
"../jbr-jdk17/bin/java" -Xms1g -Xmx4g --module-path "../javafx-sdk-17.0.13/lib/" --add-modules javafx.controls --add-modules javafx.fxml -jar beatoraja.jar
popd

If you just want to use the java in global environment, download the JavaFX (Same version as your JDK), and change

java -Xms1g -Xmx4g -jar beatoraja.jar

to

java -Xms1g -Xmx4g --module-path "../javafx-sdk-path/lib/" --add-modules javafx.controls --add-modules javafx.fxml -jar beatoraja.jar

djx314 avatar Nov 15 '24 20:11 djx314

Ref #824

djx314 avatar Nov 15 '24 21:11 djx314

Use old version of Oracle JDK8 can also solve mac problem, here's mine:

java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)

Catizard avatar Nov 19 '24 11:11 Catizard

E:\d\games\bms-install\beatoraja0.8.8-modernchic>
E:\d\games\bms-install\beatoraja0.8.8-modernchic>java -version
openjdk version "1.8.0_422"
OpenJDK Runtime Environment Corretto-8.422.05.1 (build 1.8.0_422-b05)
OpenJDK 64-Bit Server VM Corretto-8.422.05.1 (build 25.422-b05, mixed mode)

E:\d\games\bms-install\beatoraja0.8.8-modernchic>
E:\d\games\bms-install\beatoraja0.8.8-modernchic>
E:\d\games\bms-install\beatoraja0.8.8-modernchic>"beatoraja-config.bat"

E:\d\games\bms-install\beatoraja0.8.8-modernchic>REM *** Set system-wide "_JAVA_OPTIONS" environment variable to use OpenGL pipeline (improved performance of > 30 potentially. Also use anti-aliasing for non-LR2 fonts, and finally allow Swing framework to utilize AA and GTKLookAndFeel for config window. ***

E:\d\games\bms-install\beatoraja0.8.8-modernchic>set _JAVA_OPTIONS='-Dsun.java2d.opengl=true -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'

E:\d\games\bms-install\beatoraja0.8.8-modernchic>pushd E:\d\games\bms-install\beatoraja0.8.8-modernchic\

E:\d\games\bms-install\beatoraja0.8.8-modernchic>java -jar beatoraja.jar
Picked up _JAVA_OPTIONS: '-Dsun.java2d.opengl=true -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: bms/player/beatoraja/MainLoader has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:621)

E:\d\games\bms-install\beatoraja0.8.8-modernchic>popd

E:\d\games\bms-install\beatoraja0.8.8-modernchic>

图片

@Catizard beatoraja 0.8.8 need JDK17 and JDK17+, it's the reason that I create Issue 834.

And beatoraja 0.8.7 can run successful with JDK1.8.

djx314 avatar Nov 19 '24 18:11 djx314

@Catizard beatoraja 0.8.8 need JDK17 and JDK17+, it's the reason that I create Issue 834.

And beatoraja 0.8.7 can run successful with JDK1.8.

My bad, I didn't notice that

Catizard avatar Nov 20 '24 00:11 Catizard