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

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 module

Contesto 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.

comune

Diagnosi

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

Difficoltà: mediaRischio: basso

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.

  1. Compilare il progetto B4J come standalone package dall'IDE.
  2. Provare l'avvio con run_debug.bat o run_release.bat generato dal packager.
  3. 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

Schede correlate