JavaFX位置未设置错误消息

当选择menuItem时,尝试关闭当前场景并打开另一个场景时出现问题。我的主要阶段编码如下:

public void start(Stage primaryStage) throws Exception {

primaryStage.setTitle("Shop Management");

FXMLLoader myLoader = new FXMLLoader(getClass().getResource("cartHomePage.fxml"));

Pane myPane = (Pane) myLoader.load();

CartHomePageUI controller = (CartHomePageUI) myLoader.getController();

controller.setPrevStage(primaryStage);

Scene myScene = new Scene(myPane);

primaryStage.setScene(myScene);

primaryStage.show();

}

执行该程序后,它将转到cartHomePage.fxml。选择菜单项后,我可以从那里选择创建产品或创建类别。这是我的动作事件:

Stage prevStage;

public void setPrevStage(Stage stage){

this.prevStage = stage;

}

public void gotoCreateCategory(ActionEvent event) throws IOException {

Stage stage = new Stage();

stage.setTitle("Shop Management");

FXMLLoader myLoader = new FXMLLoader(getClass().getResource("createCategory.fxml"));

Pane myPane = (Pane) myLoader.load();

Scene scene = new Scene(myPane);

stage.setScene(scene);

prevStage.close();

setPrevStage(stage);

stage.show();

}

//Method to change scene when menu item create product is on click

@FXML

public void gotoCreateProduct(ActionEvent event) throws IOException {

Stage stage = new Stage();

stage.setTitle("Shop Management");

FXMLLoader myLoader = new FXMLLoader(getClass().getResource("creatProduct.fxml"));

Pane myPane = (Pane) myLoader.load();

Scene scene = new Scene(myPane);

stage.setScene(scene);

prevStage.close();

setPrevStage(stage);

stage.show();

}

但是,我只能切换一次舞台。例如,我的默认页面是cartHomePage.fxml。运行程序时,首先要创建产品阶段。在那之后,我不能再去任何地方了。错误消息是:

java.lang.IllegalStateException: Location is not set.

and Null Pointer Exception

我关上台并通过后才做好了准备。我想知道哪一部分出错了。

提前致谢。

回答:

我遇到了这个问题,找到了这篇文章。我的问题只是一个文件名问题。

FXMLLoader(getClass().getResource("/com/companyname/reports/" +

report.getClass().getCanonicalName().substring(18).replaceAll("Controller", "") +

".fxml"));

Parent root = (Parent) loader.load();

我有一个全部来自的xml,并且确保我的类与fxml文件相同,但没有word控制器。

我弄乱了子字符串,所以路径是错误的。

长话短说,我认为问题是文件名命名不正确或路径错误。

另外:从那以后我就搬到了Maven项目。非Maven方法是将所有内容都放在项目路径中。下面答案中列出的Maven方法在开始时有点令人沮丧,但我对代码进行了如下更改:

FXMLLoader loader = new FXMLLoader(ReportMenu.this.getClass().getResource("/fxml/" + report.getClass().getCanonicalName().substring(18).replaceAll("Controller", "") + ".fxml"));

以上是 JavaFX位置未设置错误消息 的全部内容, 来源链接: utcz.com/qa/426678.html

回到顶部