私はA.fxmlとB.fxmlを持っています。 Javaアプリケーションを使用したランニングは、startメソッドをオーバーライドします。私は40分ごとにループ(5回){新しいステージB.fxmlを開き、ステージをクローズします。これを5回繰り返します。私はタイマーを試してみてください私はできませんでした。私はJavaFXサービスを試してみることができませんでした。 Mythread extends Threadオブジェクトを作成します。今回は、次の段階でループをコントロールできませんでした。 for文を開始すると5段階が開きます。しかし、私は現在のステージが近づいているのを待っています。これは私の失敗コードです。JavaFX Auto Open新しいウィンドウ
public class Driver extends Application {
public static Stage stage;
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource(View.SETTINGS));
Parent root = loader.load();
Scene scene = new Scene(root);
stage = primaryStage;
stage.setScene(scene);
stage.setTitle("Info Library");
stage.setResizable(false);
stage.show();
RandomQuestionThread thread = new RandomQuestionThread();
if (DBContext.settings.isAbbreviation() || DBContext.settings.isTranslation()) {
thread.start();
}
}
public static void main(String[] args) throws InterruptedException {
DBContext.settings = DBContext.getInstance().settings().getSettings();
launch(args);
HibernateUtil.getSessionFactory().close();
}
}
public class RandomQuestionThread extends Thread {
Thread randomThread = new Thread(this);
private String fxml;
private static String TITLE;
@Override
public void run() {
while (true) {
try {
Thread.sleep(DBContext.settings.getAutoQuestionTime() * 6000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for (int i = 0; i<DBContext.settings.getAutoQuestionCount(); i++) {
randomFxml();
Platform.runLater(()->{
Parent root = null;
try {
root = new FXMLLoader(getClass().getResource(fxml)).load();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.setTitle(TITLE);
stage.show();
System.out.println(currentThread().getName());
});
}
}
}
private void randomFxml() {
int start = 0;
if (DBContext.settings.isTranslation() && DBContext.settings.isAbbreviation()) {
start = new Random().nextInt(2);
} else if (DBContext.settings.isTranslation()) {
start = 1;
}
switch (start) {
case 0:
fxml = View.ABBREVIATION;
break;
case 1:
fxml = View.TRANSLATION;
break;
default:
break;
}
if (start == 0) {
TITLE = "KISALTMA SORUSU";
} else TITLE = "ÇEVİRİ SORUSU";
}
}
私はより多くのJavaマルチスレッドを動作する必要があります。しかし、この問題を修正した後。私が間違っているところを説明してください。ループ書き込みコンソールでは、currentThread nameコンソールの結果は "Javaアプリケーションスレッド"です。しかし、私はスレッド名 "MyThread"を設定しました。私はとても混乱しています。私の脳はブルースクリーンエラーを起こしました。
showandwait()は、アプリケーションの開始メソッドまたはメインメソッドで機能しませんでした。ステージが待たされたりスレッドされたりしなかったので、今度はメインコントローラのinitメソッドで同じコードを試してみてください。この時間ステージは待っていたか、ループしていたかスレッドです。問題は修正されましたが、理由はわかりません。 –
@VolkanOkçu私が知っている 'showAndWait'の唯一の制限は次のとおりです:a)アプリケーションスレッドから呼び出し、b)プライマリステージで呼び出すことができません。 – fabian