apache / apache/netbeans

JavaFX not available/not working at runtime for NB modules

Open
#9,491 2 comments 0 reactions 0 assignees View on GitHub
JavaFX kind:bug needs:triage Platform
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.