1 回答
TA貢獻1827條經驗 獲得超4個贊
從錯誤中我假設您使用的是 JavaFX 11(或至少 JavaFX 9+)。請注意,最終的問題不是,InvocationTargetException而是IllegalAccessError:
Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x46b3f4cf) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x46b3f4cf
這告訴您“未命名模塊”中的代碼正在嘗試訪問javafx.graphics模塊的內部。由于這是不允許的,因此會引發錯誤。但這里真正的問題ControlHelper是在未命名的模塊中,但它應該在javafx.controls模塊中,如果包名可以通過的話。此問題是由javafx.graphics在modulepath上但javafx.controls在classpath上引起的。
確保您javafx.base在--module-path. 由于您的代碼不是模塊化的(沒有module-info文件),您還必須告訴模塊系統使用以下方法解決它:
--add-modules javafx.controls
您不必包含javafx.graphics在--add-modules命令中,因為javafx.controlsrequires javafx.graphics(和javafx.graphicsrequires javafx.base)。由于所有模塊都在模塊路徑上,它們將被解析。
您如何設置這些命令取決于您啟動應用程序的方式(例如命令行、IDE、Maven、Gradle 等...)。
如果您將代碼模塊化,則不需要使用該--add-modules命令,只需將適當的requires指令放入module-info文件中即可。例如:
module app {
requires javafx.controls;
}添加回答
舉報
