JavaFX not available/not working at runtime for NB modules
- Dominant language
- Java
- Stars
- 3.1k
- Forks
- 935
- Avg merge
- 2d 3h
- Merged PRs (30d)
- 17
Description
### Apache NetBeans version
Apache NetBeans 30
### What happened
Goal: build a NB module which uses JavaFX for the UI.
Understood solution:
1. add a dependency to org-netbeans-libs-javafx in the module pom
2. add the needed dependencies for JavaFX modules (controls, fxml, etc.) in the module pom with scope `provided` - NB should provide the classes
3. build the module
4. install JavaFX Library for XXX (Linux/Windows/Mac)
5. install the module
What works:
The module compile and installs, but when it tries to run JavaFX, it runs into exception
```
SEVERE [global]
java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:436)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:431)
at javafx.application.Platform.runLater(Platform.java:168)
at ste.netbeans.restart.RestartIDEAction.lambda$actionPerformed$2(RestartIDEAction.java:83)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
[catch] at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
```
I would expect the module to pick the libraries in ext, which are available:
```
[ste userdir] =)o ls -la modules/ext/
total 54204
drwxrwxr-x 2 ste ste 4096 Jul 7 23:14 .
drwxrwxr-x 3 ste ste 4096 Jul 7 23:15 ..
-rw-rw-r-- 1 ste ste 753864 Jul 7 23:14 javafx-base-21.0.9-linux.jar
-rw-rw-r-- 1 ste ste 2585211 Jul 7 23:14 javafx-controls-21.0.9-linux.jar
-rw-rw-r-- 1 ste ste 4697444 Jul 7 23:14 javafx-graphics-21.0.9-linux.jar
-rw-rw-r-- 1 ste ste 1507586 Jul 7 23:14 javafx-media-21.0.9-linux.jar
-rw-rw-r-- 1 ste ste 89705 Jul 7 23:14 javafx-swing-21.0.9-linux.jar
-rw-rw-r-- 1 ste ste 45844181 Jul 7 23:14 javafx-web-21.0.9-linux.jar
```
It seems instead these libraries are not available unless declared as `compile` scope.
### Language / Project Type / NetBeans Component
_No response_
### How to reproduce
See https://github.com/stefanofornari/nb-ide-restart/tree/ste/test/for_nb_classloading
### Did this work correctly in an earlier version?
No / Don't know
### Operating System
Linux
### JDK
both OpenJDK 21 and Zulu 21.50
### Apache NetBeans packaging
Apache NetBeans binary zip
### Anything else
I could not find any useful and updated documentation at least on how JavaFX IMplementation for XXX is supposed to work and how to use it either to build a JavaFX application or a module using JavaFX
### Are you willing to submit a pull request?
No
Contributor guide
Research direction
Start with the reproduction project at the linked for_nb_classloading path and the org-netbeans-libs-javafx dependency setup. Investigate how JavaFX libraries in modules/ext are exposed when module dependencies use provided scope, using the Toolkit not initialized stack trace as the failure point. Done means the module runs JavaFX with the documented dependency setup, or the required usage is clearly documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100