【发布时间】:2014-11-12 00:37:53
【问题描述】:
所以我正在开发一个密码管理应用程序,这是我第一次尝试使用 Java 制作 GUI。一旦用户单击登录按钮,应用程序将关闭登录窗口并仅显示主应用程序窗口。每当我尝试这样做时,我的 setPrevStage 方法都会存储一个 NULL 值,而 prevStage.close() 方法会导致程序因 NullPointerException 而崩溃。不知道我做错了什么,所以非常感谢任何建议。这是我用于此操作的 .java 文件。
package pwmanager;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.event.EventType;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
/**
*
* @author 176878
*/
public class FXMLDocumentController implements Initializable {
@FXML
private Button loginButton;
@FXML
Stage prevStage;
Stage currentStage;
public void setPrevStage(Stage stage){
prevStage = stage;
if (stage == null){
System.out.println("Stage NULL");
}
}
@FXML
public void getPrevStage(Stage stage){
currentStage = prevStage;
}
@FXML
public void loginButtonAction(ActionEvent event) throws IOException {
System.out.println("You clicked me, logging in!");
setPrevStage(prevStage);
Stage stage = new Stage();
FXMLLoader loader = new FXMLLoader(getClass().getResource("MainScreen.fxml"));
Parent mainScreen = (Parent)loader.load();
Scene scene = new Scene(mainScreen);
stage.setScene(scene);
stage.setTitle("Password Manager");
prevStage.close();
stage.show();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
【问题讨论】: