今日は数時間のビデオの後にこの問題を解決できません。JavaFXバックグラウンドスレッドの問題
実行者サービス、ワーカー、タスク、並行パッケージ... ??私はどこで何をすべきかについて混乱しています。
起動時にUIにメッセージを投稿するオブジェクトをいくつか初期化したいとします。私のオブジェクトの
public interface SystemMessage {
void postMessage(String outText);
}
一つといくつかのメソッド起動時にいくつかのオブジェクトを初期化し
public class Identity extends Service {
private String machineId = null;
private static SystemMessage systemMessage;
public Identity(SystemMessage smInterface){
systemMessage = smInterface;
//how do i run the identity class in the background and report to the UI?
// --------------------------------------------------
//
systemMessage.postMessage("Checking Machine Identity");
if (getStoredIdentity()){
systemMessage.postMessage("Machine ID exists.");
}
else{
systemMessage.postMessage("No Machine ID. Create New.");
machineId = createUuid();
storeIdentity();
}
}
}
// --------------------------------------------------
//
//Do I create individual tasks for each method in the class? do i use service, task, executer, or????
// --------------------------------------------------
//
private void storeIdentity(){
Properties p = new Properties();
p.setProperty("machineId", this.machineId);
try {
FileWriter file = new FileWriter("identity.properties");
p.store(file, "Identity");
systemMessage.postMessage("New Identity Created and Stored.");
} catch (IOException e) {
systemMessage.postMessage("Error Creating New Identity!");
e.printStackTrace();
}
}
私のメインファイル:
私はインターフェイスを持っています。
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/entry.fxml"));
Parent root = loader.load();
mainController = (SystemMessage) loader.getController();
primaryStage.setTitle("ASI Sync!");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
initializeSync.start();
}
Thread initializeSync = new Thread(){
public void run(){
System.out.println("Thread Running");
Identity identity = new Identity(mainController);
Api api = new Api(mainController);
SqLite db = new SqLite(mainController);
}
};