public class Matrices extends Application {
@Override // Override the start method in the Application class
public void start(Stage primaryStage) {
String inputValue = JOptionPane.ShowInputDialogue("Enter a value: ");
}
public static void main (String[] args){
launch(args);
}
}
这将无限期运行该程序,并且不会显示JOptionPane对话框询问用户输入
答案 0 :(得分:2)
为什么不应该使用JOptionPane
请勿在JavaFX应用程序中使用JOptionPane
。
JOptionPane
用于Swing库,而不是JavaFX库。
通常,除非有充分的理由,否则不要混合使用Swing和JavaFX代码,即使那样,也必须注意如何管理集成(例如线程管理),以确保获得最佳结果。
使用JavaFX对话框
使用JavaFX Dialog
或Alert
代替JOptionPane
。
对于您的特定情况,您正在使用JOptionPane
来收集输入,因此与此等效的JavaFX对话框是TextInputDialog
。
为什么您的应用无法退出
关于应用程序为何无法完成的原因,请参见Application
文档:
等待应用程序完成,发生以下任一情况:
- 应用程序调用Platform.exit()
- 最后一个窗口已关闭,并且Platform上的hiddenExit属性为true
由于您永远不会显示JavaFX窗口并关闭它,也永远不会调用Platform.exit()
,因此该应用程序永远不会关闭。
当显示TextInputDialog
时不会出现此问题,因为这是JavaFX窗口。输入值并关闭输入对话框后,该应用程序将自动关闭(如果该对话框是当前为该应用程序显示的唯一窗口)。
工作示例
以下是使用TextInputDialog
而不是JOptionPane
的示例:
import javafx.application.Application;
import javafx.scene.control.TextInputDialog;
import javafx.stage.Stage;
import java.util.Optional;
public class TextInputDialogExample extends Application {
private Optional<String> getValueFromUser() {
TextInputDialog dialog = new TextInputDialog("xyzzy");
dialog.setTitle("Value Input");
dialog.setHeaderText("Enter a value:");
dialog.setContentText("Value:");
return dialog.showAndWait();
}
@Override
public void start(Stage stage) {
Optional<String> value = getValueFromUser();
value.ifPresent(System.out::println);
}
public static void main(String args[]) {
launch(args);
}
}