my objective is to make my agent load an external JavaFX menu in the Forge environment, and have the parent root be based off an FXML file.
this is the code. just a simple JavaFX template being ran off a thread
Code
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import sun.reflect.CallerSensitive;
public class JavaFXTest extends Application implements Runnable {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
@Override
public void run() {
launch();
}
}
however when the thread is started, i'm met with the following error
Code
[15:46:56] [Thread-13/WARN] [FML]: =============================================================
[15:46:56] [Thread-13/WARN] [FML]: MOD HAS DIRECT REFERENCE System.exit() THIS IS NOT ALLOWED REROUTING TO FML!
[15:46:56] [Thread-13/WARN] [FML]: Offendor: com/sun/javafx/application/LauncherImpl.abort(Ljava/lang/Throwable;Ljava/lang/String;[Ljava/lang/Object;)V
[15:46:56] [Thread-13/WARN] [FML]: Use FMLCommonHandler.exitJava instead
[15:46:56] [Thread-13/WARN] [FML]: =============================================================
Exception in thread "Thread-13" [15:46:56] [JavaFX Application Thread/INFO] [STDERR]: [com.sun.javafx.application.LauncherImpl:lambda$launchApplication1$161:865]: Exception in Application start method
[15:46:56] [JavaFX-Launcher/INFO] [STDERR]: [com.sun.javafx.application.LauncherImpl:launchApplication1:933]: Workaround until RT-13281 is implemented: keep toolkit alive
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: java.lang.RuntimeException: Exception in Application start method
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at java.lang.Thread.run(Thread.java:748)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: Caused by: java.lang.InternalError: CallerSensitive annotation expected at frame 1
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at sun.reflect.Reflection.getCallerClass(Native Method)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at javafx.fxml.FXMLLoader.getDefaultClassLoader(FXMLLoader.java:3066)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at javafx.fxml.JavaFXBuilderFactory.<init>(JavaFXBuilderFactory.java:87)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:1815)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at net.minecraft.myMod.JavaFXTest.start(JavaFXTest.java:14)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at java.security.AccessController.doPrivileged(Native Method)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
[15:46:56] [Thread-13/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: ... 1 more
the problem is triggered from this line
Code
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
i can get rid of the
System.exit() warning by excluding the JavaFX libraries from transformation before loading them, like so
Code
static {
Launch.classLoader.addTransformerExclusion("javafx.");
Launch.classLoader.addTransformerExclusion("com.sun.javafx.");
}
however the exceptions are still there. as an alternative to loading the root from an FXML file, technically i
can just create the JavaFX menu with pure java code. i've tested this already and it works just fine when i don't attempt to load in an FXML file. utilizing SceneBuilder with FXML is a much more flexible and time saving process though.
any suggestions? as always any help is appreciated.