B4J
class anywheresoftware.b4j.object.JavaObject cannot access class com.sun.javafx.collections.ObservableListWrapper because module javafx.base does not export com.sun.javafx.collections to unnamed module – B4X IllegalAccessException
L'errore non è causato dall'allineamento della colonna in sé, ma dall'avvio manuale del jar B4J con un module-path incompleto. JavaFX 11+ protegge com.sun.javafx.collections; usando il pacchetto standalone dell'IDE o la command line generata da B4J si includono i moduli corretti e il problema scompare.
Cosa significa questo errore?
L'errore non è causato dall'allineamento della colonna in sé, ma dall'avvio manuale del jar B4J con un module-path incompleto. JavaFX 11+ protegge com.sun.javafx.collections; usando il pacchetto standalone dell'IDE o la command line generata da B4J si includono i moduli corretti e il problema scompare.
Messaggio originale
class anywheresoftware.b4j.object.JavaObject cannot access class com.sun.javafx.collections.ObservableListWrapper because module javafx.base does not export com.sun.javafx.collections to unnamed moduleContesto e parole chiave
Alias
- JavaFX module export error
- TableView column alignment
Messaggi alternativi
- IllegalAccessException su ObservableListWrapper con Java superiore a 8
Prodotti
- B4J
- JavaFX
- TableView
Piattaforme
- Linux
- macOS
- Windows
Parole chiave
- b4j illegalaccessexception javafx
- b4j run_debug.bat module path
- observablelistwrapper b4j
Cause possibili
Module-path JavaFX incompleto nel comando manuale
Il comando usato per lanciare il jar espone soltanto alcuni moduli JavaFX e lascia il codice B4J senza le opzioni e i moduli generati dall'IDE. La reflection di JavaObject finisce così su una classe interna non esportata dal modulo javafx.base.
comuneDiagnosi
Differenza tra avvio IDE e avvio manuale
Avviare lo stesso progetto dall'IDE e poi dal comando usato in produzione. Se funziona nell'IDE ma fallisce con IllegalAccessException, confrontare il module-path con run_debug.bat generato dal pacchetto standalone.
Come leggere il risultato. La differenza di comportamento isola il problema nella distribuzione dei moduli JavaFX, non nel codice SetColumnStyle.
Risoluzione
Usare la configurazione di avvio generata da B4J
Creare un pacchetto standalone con l'IDE e riutilizzare la command line generata, oppure usare il file release_java_modules.txt previsto da B4J per un jar non impacchettato.
- Compilare il progetto B4J come standalone package dall'IDE.
- Provare l'avvio con run_debug.bat o run_release.bat generato dal packager.
- Se si mantiene il jar, confrontare il comando con la configurazione di moduli generata da B4J e non usare un module-path ridotto a mano.
Domande frequenti
Perché lo stesso codice funziona nell'IDE?
L'IDE B4J aggiunge i moduli JavaFX necessari. Il comando manuale del caso non li includeva nella stessa forma, quindi la reflection veniva bloccata dal sistema dei moduli Java.
Approfondimenti
- B4JPackager11: The simplest way to distribute UI apps tutorial_b4x_ufficiale
- [SOLVED] B4J TableView Column Alignment Error in Java versions higher than 8 thread_b4x_verificato
- How to handle multiple B4JPackager11 .exe modules to minimize disk usage riferimento_b4x_tecnico