私はjavafxアプリケーションを持っています。私はそれが完了するまで実行するプログレスバーでアプリケーションを開始するようにプログラムしました。完了すると、ウィンドウが閉じ、ログインウィンドウが開きます。サインインすると、ログインウィンドウが閉じ、メインウィンドウが開きます。スレッドを実行しているタスクが永久に停止するようにスレッドを停止するにはどうすればよいですか?
しかし、それは私のアプリケーションで起こっていることではありません。
私は0-100のプログレスバーを実行するタスクを作って、そのタスクをスレッドで実行するようにしました。タスクが完了すると、ウィンドウが閉じてログインウィンドウが開きます。
私が遭遇している問題は、ログインウィンドウを使用してサインインすると、メインウィンドウが開きますが、ログインウィンドウは閉じられませんでした。
メインウィンドウが開いたときにログインウィンドウを閉じる方法を書きましたが、それは動作しませんでした。
私には何が欠けていますか?
この
これはあなたがログインウィンドウを使用してサインインしている必要があります後、スレッドThread thread;
@FXML
private JFXProgressBar progress;
@Override
public void initialize(URL url, ResourceBundle rb) {
progress.setProgress(0.0);
Runnable tasks = new TaskClass();
thread = new Thread(tasks);
thread.start();
}
上のプログレスバーをロードするタスククラス
public class TaskClass implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
progress.setProgress(i/100.0);
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(RunningController.class.getName()).log(Level.SEVERE, null, ex);
}
}
Platform.runLater(new Runnable() {
@Override
public void run() {
// this is the method that closes the window on which the progress bar is running
closed(clos);
// this is the method that opens the login
windowloadwindow("/inventory/management/login/InventoryManagementlogin.fxml", "DeMak Inventory");
}
});
}
}
あり、これが起こることを意味している
loadwindow("/inventory/management/ui/Main/main.fxml", "Deemax Inventory"); // a method that opens the main window
closed(closew); // a method that closes the login window
'Platform.later()'はバックグラウンドスレッドから呼び出すことができる 'updateProgress(...)'を使用し、進行状況バーをタスクのprogressプロパティにバインドすることで完全に回避することができます。これは、 'updateProgress()'を頻繁に呼び出しても、 'Platform.runLater()'への呼び出し回数を知的に制限するという利点があります。 –
Nikiforos Archakis、私は試しましたが、サインイン後にログインウィンドウが閉じなくなりました –
James D、本当にあなたがそのことを理解していません –