//上下文,如果您不感兴趣,请废话
我正在构建一个Javafx应用程序,我想在其中使用“初始化窗口”,然后单击“开始”后使用另一个窗口。我已经使应用程序的另一个窗口部分工作了,但是我认为我想更改它的某些部分。 除了要弄乱整个代码之外,我还想使用Test文件夹来检查我的GUI是否正在寻找应有的方式。 无论如何,如果可以检查是否有与gui相关的bug,无论是GUI还是逻辑,我都认为这是一个很好的测试。 我正在使用fxml tho。
//实际问题
所以: 我有一个使用GUI包(及其所有组件)的已工作应用程序,用于处理gui。当我尝试在Test文件夹(由IntelliJ创建)中使用几乎相同的代码时,我最终得到
“ java.lang.IllegalAccessError:com.sun.javafx.fxml.FXMLLoaderHelper类(未命名模块@ 0x26212a9c)无法访问com.sun.javafx.util.Utils类(在javafx.graphics模块中),因为模块javafx。图形不会将com.sun.javafx.util导出到未命名的模块@ 0x26212a9c“
我试图在这里找到答案。我通常至少要花3个小时才能写出问题之前要找到答案,尽管这并不意味着我不仅对自己的Google关键字不走运。 我一直收到同样的消息:“ jfx不再是SDK的一部分”,但是如果那是我的问题,那么我将无法首先运行任何与javafx相关的东西。 (我使用Maven,我不知道这是不是问题所在。)
根据我的其他Google匹配,该问题与Java 9和模块有关,我对此一无所知 (很明显,我阅读了所有关于该主题的文章以及其他页面,但没有解决我的问题)
我的猜测是,由于处于测试文件夹中,因此我无法正确导入某些内容,但这只是运行时问题,因此听起来很愚蠢。
//这是我要运行的应用程序:
public class GUItest extends Application {
private static TestController controller;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage mainWindow) throws IOException {
mainWindow.setOnCloseRequest(n -> System.exit(0));
controller = new InitTestController(mainWindow);
URI uri = new File(/*path*/).toURI();
// I couldn't make it work with getclass().getresources()
// I don't think that can be a problem, if this works on non-test
//folders.
FXMLLoader loader = new FXMLLoader(uri.toURL());
// this is deliberate, so I can give the Controller class it's
// mainWindow although it's probably not the best way to do so,
// feel free to suggest a better solution
loader.setController(controller);
controller.init(loader.load());
}
}
//,这是TestController: //这在main上看起来相同,只是名称不同,还有更多@fxmls
public class TestController implements Initializable {
public TestController(){}
private final Integer width = 400;
private final Integer height = 300;
@FXML
private Button startButton;
private Stage mainWindow;
public TestController(Stage mainWindow){
this.mainWindow = mainWindow;
}
public void init(Parent root) throws IOException {
mainWindow.setTitle("initializer window");
mainWindow.setScene(new Scene(root, width, height));
mainWindow.show();
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
//empty
}
}
当我弄乱主文件夹中正在工作的主应用程序时,此完全相同的代码可以正常工作。 但是,当我将其放入测试文件夹时,它突然坏了。