所以这只是基本的控制台结构,我遵循我的gui程序,然而,我注意到每当我输入一个选项来提示一个屏幕,它最终会冻结,我知道这显然是因为无限while循环,但我没有其他方法期待控制台重新提示,只要窗口关闭。这就是为什么我依赖while循环,请有人能为我提供一个解决方案。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.util.Scanner;
public class testGuiConsole extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane borderPane = new BorderPane();
labelStatement:
while (true) {
System.out.println("Press a for method a");
System.out.println("Press b for method b");
System.out.println("Enter q to end program!");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine().toLowerCase();
switch (input) {
case "a":
optionA(borderPane, primaryStage);
primaryStage.show();
break;
case "b":
optionB(borderPane, primaryStage);
primaryStage.show();
break;
case "q":
break labelStatement;
default:
System.out.println("wrong option!");
}
}
}
private void optionA(BorderPane borderPane, Stage primaryStage) {
primaryStage.setScene(new Scene(borderPane, 1000, 500));
}
private void optionB(BorderPane borderPane, Stage primaryStage) {
primaryStage.setScene(new Scene(borderPane, 1000, 500));
}
}
1条答案
按热度按时间p1iqtdky1#
您不应该在fxthread中执行长时间的计算,而阻塞方法(如scanner#nextline)可能非常长。。。
您必须在单独的线程上请求该选项。根据所选的选项,您可能需要执行一些操作来修改gui。在这种情况下,您必须使用platform#runlater方法在fxthread中执行此操作。
下面是一个使用java 8的快速示例:
以下是@genesis\u kitty评论后的一个示例(可以对更好的代码进行一些优化):