我有一个问题。我怎样才能在JavaFX中做异步数据库。我知道 SwingWoker 存在,但我读到我不能在 JavaFX 中使用它。我读到了有关 Task 的内容,但我可以将结果转换为 ObservableList,但我需要普通的 LinkedList。 我正在尝试连接 mysql 数据库
我知道这个论坛有很多关于javafx中数据库的回答,但所有结果都转换为ObservableList
感谢您的所有回答。
FlightControllerTask.java
public class FlightControllerTask extends Task<LinkedList<Flight>>{
private final static int MAX=10000;
ArrayList<Airport> airportList=new ArrayList<>()
@Override
protected LinkedList<Flight> call() throws Exception {
for (int i = 0; i < MAX; i++) {
updateProgress(i, MAX);
Thread.sleep(5);
}
LinkedList<Flight> flightList = new LinkedList<>();
Connection c ;
c = DBConnector.connect();
String SQL = "SELECT flight.idflight, airport.nameAirport, airport.nameAirport, flight.departureTime FROM flight INNER JOIN airport";
ResultSet rs = c.createStatement().executeQuery(SQL);
while(rs.next()){
flightList.add(new Flight(rs.getInt("idflight"), rs.getString("flightFrom"), rs.getString("flightTo"), rs.getTime("departureTime")));
}
return flightList;
}
FlightController服务
public class FlightControllerService extends Service<LinkedList<Flight>>{
@Override
protected Task<LinkedList<Flight>> createTask() {
return new FlightControllerTask();
}
}
MainController.java
final FlightControllerService service= new FlightControllerService();
ReadOnlyObjectProperty<LinkedList<Flight>> flightList =service.valueProperty();
flightList.get();
最佳答案
public class FlightControllerTask extends Task<LinkedList<Flight>>{
@Override
protected LinkedList<Flight> call() throws Exception {
// load data
return data;
}
}
// usage:
FlightControllerTask task = new FlightControllerTask();
task.setOnSucceeded(ev -> task.getValue());
new Thread(task).start();
现在 task.getValue()
部分是关键部分,使用此方法,您可以在准备就绪后立即检索使用任务计算的值(因此是成功的钩子(Hook)) .
关于mysql - 我如何在JavaFX中进行异步数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27480546/