这是退出应用程序的正确方法吗?
Is this the proper way of exiting from the application?
我有一个运行正常的 JavaFX 应用程序。我已经使用 Scene Builder 创建了应用程序的 GUI,并且设法连接了我的控制器。因此,应用程序从数据库加载数据,然后显示在 TableView
.
中
所以应用程序是这样设置的:
控制器:StudenOverview.java
@Override
public void initialize(URL location, ResourceBundle resources) {
//SOMETHING IS MISSING HERE, WHAT IS IT?
regNumber.setCellValueFactory(new PropertyValueFactory<Student, String>("regNumber"));
name.setCellValueFactory(new PropertyValueFactory<Student, String>("firstName"));
surname.setCellValueFactory(new PropertyValueFactory<Student, String>("lastName"));
buildData();
}
public void buildData() {
BDConnect connection = new BDConnect();
students = FXCollections.observableArrayList();
try {
String loadDataSQL = "SELECT * FROM _students_ ORDER BY _id";
ResultSet res = connection.connect().createStatement().executeQuery(loadDataSQL);
while (res.next()) {
Student st = new Student();
st.setRegNumber(res.getString(1));
st.setFirstName(res.getString(2));
st.setLastName(res.getString(3));
students.add(st);
}
table.setItems(students);
} catch (SQLException | ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Could not load data, the system will exit!");
//Of course i will print the error for debugging
System.exit(-1);
System.out.println("Could not laod data in the Table!");
}
}
我的MainApp.java
class:
public class MainApp extends Application {
private Stage primaryStage;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Student App");
initRootLayout();
}
public static void main(String[] args) {
launch(args);
}
/**
* Initializes the root layout.
*/
public void initRootLayout() {
try {
// Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/StudentOverview.fxml"));
// Show the scene containing the layout.
Scene scene = new Scene(loader.load());
primaryStage.setScene(scene);
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
一切正常,但我担心的是当 buildData
方法加载数据失败时,比如由于 SQL 语法,应用程序将在 table 中显示一个空的图形用户界面。这是 bad
,因为如果 table 中没有数据,用户将无法使用该应用程序。因此,在我的例子中,我使用 System.exit()
退出应用程序。
所以,我的问题:
这是正确的做法吗?程序员有什么推荐?如果你在哪里,你会怎么做?
System.exit() 是强制退出,你可以这样使用:
Platform.exit();
我有一个运行正常的 JavaFX 应用程序。我已经使用 Scene Builder 创建了应用程序的 GUI,并且设法连接了我的控制器。因此,应用程序从数据库加载数据,然后显示在 TableView
.
所以应用程序是这样设置的:
控制器:StudenOverview.java
@Override
public void initialize(URL location, ResourceBundle resources) {
//SOMETHING IS MISSING HERE, WHAT IS IT?
regNumber.setCellValueFactory(new PropertyValueFactory<Student, String>("regNumber"));
name.setCellValueFactory(new PropertyValueFactory<Student, String>("firstName"));
surname.setCellValueFactory(new PropertyValueFactory<Student, String>("lastName"));
buildData();
}
public void buildData() {
BDConnect connection = new BDConnect();
students = FXCollections.observableArrayList();
try {
String loadDataSQL = "SELECT * FROM _students_ ORDER BY _id";
ResultSet res = connection.connect().createStatement().executeQuery(loadDataSQL);
while (res.next()) {
Student st = new Student();
st.setRegNumber(res.getString(1));
st.setFirstName(res.getString(2));
st.setLastName(res.getString(3));
students.add(st);
}
table.setItems(students);
} catch (SQLException | ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Could not load data, the system will exit!");
//Of course i will print the error for debugging
System.exit(-1);
System.out.println("Could not laod data in the Table!");
}
}
我的MainApp.java
class:
public class MainApp extends Application {
private Stage primaryStage;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Student App");
initRootLayout();
}
public static void main(String[] args) {
launch(args);
}
/**
* Initializes the root layout.
*/
public void initRootLayout() {
try {
// Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/StudentOverview.fxml"));
// Show the scene containing the layout.
Scene scene = new Scene(loader.load());
primaryStage.setScene(scene);
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
一切正常,但我担心的是当 buildData
方法加载数据失败时,比如由于 SQL 语法,应用程序将在 table 中显示一个空的图形用户界面。这是 bad
,因为如果 table 中没有数据,用户将无法使用该应用程序。因此,在我的例子中,我使用 System.exit()
退出应用程序。
所以,我的问题:
这是正确的做法吗?程序员有什么推荐?如果你在哪里,你会怎么做?
System.exit() 是强制退出,你可以这样使用:
Platform.exit();