0

javafx 2で他のクラスメソッドからステージを閉じることは可能ですか?

私は小さなアプリケーションを開発していますが、この問題に悩まされています。ロードされた Login FXML GUI を他のクラス メソッド (TimerScheduler) からしばらくして閉じたいだけです。1 秒後にログイン ステージを閉じるのは奇妙だと思いますが、それが可能であれば、それを使用することもあります。前もって感謝します!

ここに私のコードのサンプルがあります:

**Main.java**

@Override
public void start(Stage primaryStage) throws IOException {

    // Load the stage from FXML
    AnchorPane page = (AnchorPane) FXMLLoader.load(getClass().getResource("/fxml/FXMLLogin.fxml"));
    Scene scene = new Scene(page);
    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.setTitle("Admin Login");
    primaryStage.show();

    // Run the timer to execute task
    Timer timer = new Timer();
    TimerScheduler doTask = new TimerScheduler(timer);
    int firstSart = 1000;
    int period = 1000;
    timer.schedule(doTask,firstSart,period);
}


**TimerScheduler.java**

public class TimerScheduler extends TimerTask{

    Timer timer;
    int count = 0;

    public TimerScheduler(){}

    public TimerScheduler(Timer timer){
        this.timer=timer;
    }

    @Override
    public void run() {
        count++;

        if(count==30){ // execute after 30 seconds
            // I want to close the stage here
        }
    }    

}
4

2 に答える 2

0

私はより良い解決策を得ました!別のスレッドで実行される別のクラスでタイマーベースのタスクを実行する代わりに、それを独自のクラスメソッドに含めて、同じスレッドを取得できるようにします。これが私のコードです。

**Main.java**

Timeline TimerTaskExec = new Timeline(new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {

    count++;

    if(count==30){
        // do the task
        stage.close();
    }

}

}));

TimerTaskExec.setCycleCount(Timeline.INDEFINITE);
TimerTaskExec.play();
于 2013-07-26T06:16:13.643 に答える