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.controls
requires javafx.graphics
(和javafx.graphics
requires javafx.base
)。由于所有模塊都在模塊路徑上,它們將被解析。
您如何設置這些命令取決于您啟動應用程序的方式(例如命令行、IDE、Maven、Gradle 等...)。
如果您將代碼模塊化,則不需要使用該--add-modules
命令,只需將適當的requires
指令放入module-info
文件中即可。例如:
module app { requires javafx.controls; }
添加回答
舉報