음 ... Uluk Biy에서 힌트를 얻은 후에 나는 주변에서 시도하기 시작했습니다. 6 시간 후 나는 다음과 같이 트릭을했다 :
이것은 필요한 작업을 반환하는 나의 방법이다.
public static Task saveNewAccoounting(final Accounting a){
Task<Integer> saveNewAccountingTask = new Task<Integer>() {
@Override protected Integer call() throws Exception {
try {
run.logger.log(Level.FINE, "Started saveNewAccounting Task!");
PreparedStatement newAcc;
newAcc = Connect.con.prepareStatement("INSERT INTO `ACCOUNTING`(`ACCNUMBER`, `ACCDATE`, `SHOP`, `CUSTOMER`, `CATEGORIES`, `WRITTENBY`, `DATE`, `DESCRIPTION`, `NOTE`, `PRICE`, `FILEORIGINAL`, `FILEBYTE`) VALUES (null,null,?,?,?,?,?,?,?,?,?,?)");
newAcc.setInt(1, a.getShop());
newAcc.setInt(2, a.getCustomer());
newAcc.setInt(3, a.getCategories());
newAcc.setInt(4, Credentials.getUserid());
newAcc.setDate(5, a.getDate());
newAcc.setString(6, a.getDescription());
if (a.getNote().equals("")){
newAcc.setNull(7, java.sql.Types.VARCHAR);
} else {
newAcc.setString(7, a.getNote());
}
newAcc.setDouble(8, a.getPrice());
if(a.getAttachment() != null){
newAcc.setString(9, a.getAttachment().getName());
newAcc.setBlob(10, new FileInputStream(a.getAttachment()));
} else {
newAcc.setNull(9, java.sql.Types.VARCHAR);
newAcc.setNull(10, java.sql.Types.BLOB);
}
if(!newAcc.execute()){
newAcc.close();
run.logger.log(Level.FINE, "Successfully completed saveNewAccounting Task!");
return 1;
} else {
newAcc.close();
run.logger.log(Level.FINE, "Completed saveNewAccounting Task with Failures!");
return 0;
}
} catch (SQLException ex) {
run.dblogger.log(Level.SEVERE, ex.getMessage());
run.logger.log(Level.FINE, "Completed saveNewAccounting Task with Failures!");
return 0;
} catch (FileNotFoundException f){
run.iologger.log(Level.SEVERE, f.getMessage());
run.logger.log(Level.FINE, "Completed saveNewAccounting Task with Failures!");
return 0;
}
}
};
return saveNewAccountingTask;
}
당신이해야 할 일은 반환 된 작업으로 스레드를 인스턴스화하고 실행하기 만하면됩니다.
//Make your Progress visible here
final Task saveTask = SaveTasks.saveNewAccoounting(acc);
Thread saveThread = new Thread(saveTask);
saveThread.setDaemon(true);
saveThread.start();
이제 Listener를 작업에 추가하면 작업이 완료됩니다.
희망이 있으면 나중에 도움이 될 것입니다.
DB 작업은 JavaFX UI 스레드가 아닌 다른 스레드에서 수행해야합니다. 그렇지 않으면 UI는 DB 작업이 완료 될 때까지 일시적으로 대기/고정됩니다. 이 [검색 결과] (http://stackoverflow.com/search?q=%5Bjavafx%5D+or+%5Bjavafx-2%5D+progress+bar+task+is%3Aquestion)를 조사하십시오. –
음 ... 이제 점점 더 복잡해 졌어.하지만 ... 힌트를 주셔서 감사합니다! – downdrown