【问题标题】:fxml getTitle method can't be interpreted by FXMLLoaderFXMLLoader 无法解释 fxml getTitle 方法
【发布时间】:2017-07-26 08:32:47
【问题描述】:

我的 FXML 代码有问题。 我想在初始化时获取舞台标题的字符串,但是当我尝试调用操作stage.getTitle() 时,FXMLLoader 会抛出异常。 我也尝试在其他方法中获得标题,但它只在其中一些方法中有效。谁能告诉我问题出在哪里?

这是初始化阶段的地方:

@FXML
private void handleModellAction(ActionEvent event) throws IOException{
    FXMLLoader load = new FXMLLoader(getClass().getResource("InEX.fxml"));
    Parent root = (Parent) load.load();
    Stage stage = new Stage();

    stage.setScene(new Scene(root));
    stage.show();

    link = (Hyperlink) event.getTarget();
    model = link.getText();

    stage.setTitle(model);
}

这是控制器类中的初始化方法:

public void getTitle(){
    System.out.println(this.stage.getTitle());
}

@Override
public void initialize(URL url, ResourceBundle rb) {
    image = new Image("images/test.png", 1500, 900, true, true);
    interieurImg.setImage(image);

    model = this.stage.getTitle();
}

这是抛出的异常:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException     
   at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)         
   at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)      
   at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)       
   at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)      
   ... 52 more      

   Caused by: javafx.fxml.LoadException: file:/C:/Users/p356545/Documents/NetBeansProjects/VFAfxml3/dist/run1293777989/VFAfxml3.jar!/vfafxml3/Interieur.fxml        
   at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)   at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)        
   at ...       
   at vfafxml3.InEXController.handleInterieurAction(InEXController.java:58)     ... 62 more         

   Caused by: java.lang.NullPointerException        
   at vfafxml3.InterieurController.getTitle(InterieurController.java:49)        
   at vfafxml3.InterieurController.initialize(InterieurController.java:88)      
   at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)     ... 70 more

【问题讨论】:

  • 也许您过早地要求舞台的标题:) 我认为如果您在初始化完成后调用该函数,它会起作用。试试看告诉我
  • 请显示调用initialize方法的位置。
  • @Calips 我在一个简单的 buttonClicked 方法中尝试了它,它引发了类似的异常。奇怪的是,它可以在超链接调用的导航方法中工作。
  • @LazerBanana 我没有手动调用它。我认为它会自动发生,不是吗?
  • @Calips 这个有用,谢谢。但是在初始化方法中还为时过早。我将使用控制器构造函数定义字符串。谢谢你:)

标签: java javafx fxml scenebuilder fxmlloader


【解决方案1】:

在initialize-method中获取舞台标题还为时过早。在使用以下实现初始化阶段后,您可以通过任何其他方法获取它:

public String getTitle(){
    Stage stages = (Stage) anyChoosenElement.getScene().getWindow();
    String modelString = stages.getTitle();
    return modelString;
}

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2019-09-01
    • 2020-04-13
    相关资源
    最近更新 更多