Tôi tự hỏi liệu có ai có thể giúp tôi với một vấn đề khá khó chịu về việc tạo một chuỗi nền trong JavaFX không! Tôi hiện đang có một số truy vấn SQL thêm dữ liệu vào giao diện người dùng hiện đang chạy trên Chủ đề ứng dụng JavaFX (xem ví dụ bên dưới). Tuy nhiên, khi mỗi truy vấn này thực thi nó sẽ đóng băng giao diện người dùng vì nó không chạy trên một chuỗi nền. Tôi đã xem xét các ví dụ khác nhau sử dụng Task và loại hiểu chúng nhưng tôi không thể làm cho chúng hoạt động khi thực hiện các truy vấn cơ sở dữ liệu, một số trong số đó mất vài giây để chạy.JavaFX - Chủ đề nền cho truy vấn SQL
Đây là một trong những phương pháp mà thực hiện một truy vấn:
public void getTopOrders() {
customerOrders.clear();
try {
Connection con = DriverManager.getConnection(connectionUrl);
//Get all records from table
String SQL = "EXEC dbo.Get_Top_5_Customers_week";
ResultSet rs;
try (Statement stmt = con.createStatement();) {
rs = stmt.executeQuery(SQL);
while (rs.next()) {
double orderValue = Double.parseDouble(rs.getString(3));
customerOrders.add(new CustomerOrders(rs.getString(1),
rs.getString(2), "£" + formatter.format(orderValue),
rs.getString(4).substring(6, 8) + "/" +
rs.getString(4).substring(4, 6) + "/" +
rs.getString(4).substring(0, 4)));
}
}
} catch (SQLException | NumberFormatException e) {
}
}
Mỗi bản ghi xử lý được thêm vào một ObservableList được liên kết với một TableView, hoặc biểu đồ hoặc chỉ đơn giản là thiết lập văn bản trên một nhãn (phụ thuộc vào truy vấn). Làm thế nào tôi có thể thực hiện truy vấn trên một sợi nền và vẫn rời khỏi giao diện miễn phí để sử dụng và được cập nhật từ các truy vấn
Cảm ơn trước
Bạn có quan sát các lớp học trong gói javafx.concurrent không? docs.oracle.com/javafx/2/api/javafx/concurrent/…. Tôi nghĩ, một lớp Task đặc biệt thú vị đối với bạn: docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html, bạn có thể đọc javadoc của nó, để hiểu danh sách đầy đủ các tùy chọn. –
Có lẽ DataFX có thể giúp bạn: http://www.javafxdata.org hoặc http://www.guigarage.com/category/datafx/ –