Ich schreibe eine kleine App und jetzt habe ich ein Problem entdeckt. Ich muss eine (später vielleicht zwei) Methode aufrufen (diese Methode lädt etwas und gibt das Ergebnis zurück), ohne im Fenster von app zu hängen.
Ich habe Klassen wie Executor
oder Callable
gefunden, aber ich verstehe nicht, wie man mit diesen arbeitet.
Können Sie bitte irgendeine Lösung posten, die mir hilft?
Danke für alle Hinweise.
Bearbeiten: Die Methode MUSS das Ergebnis zurückgeben. Dieses Ergebnis hängt von den Parametern ab. Etwas wie das:
%Vor%Diese Methode funktioniert ungefähr 8-10 Sekunden. Nach dem Ausführen dieser Methode kann der Thread gestoppt werden. Aber ich muss die Methoden alle 2 Minuten anrufen.
Bearbeiten: Ich habe Code mit diesem bearbeitet:
%Vor% Mit diesem Code bekomme ich wieder einen Fehler (auch wenn ich return null
aus catch -Block setze).
Erstens würde ich empfehlen, sich die Java-Thread-Dokumentation .
Mit einem Thread können Sie einen Schnittstellentyp namens Runnable
übergeben. Die Dokumentation finden Sie hier . Ein Runnable ist ein Objekt, das eine Methode run
hat. Wenn Sie einen Thread starten, ruft er den Code in der run
-Methode dieses ausführbaren Objekts auf. Zum Beispiel:
Nun heißt das, wenn Sie t.start()
aufrufen, wird der von Ihnen benötigte Code ausgeführt, ohne dass der Hauptthread zurückbleibt. Dies wird als Asynchronous
-Methodenaufruf bezeichnet, was bedeutet, dass er parallel zu jedem anderen Thread ausgeführt wird, den Sie geöffnet haben, wie Ihr main
-Thread. :)
Seit Java 8 können Sie eine kürzere Form verwenden:
%Vor%Aktualisierung: Sie können auch die Methodenreferenz verwenden:
%Vor%Sie können es verwenden, wenn Ihre Argumentliste die gleiche ist wie in @FunctionalInterface , z Runnable oder Aufrufbar .
Siehe mehr: Platform.runLater
und Task
in JavaFX , Methodenreferenzen .
Wenn Sie in Java 8 keine Parameter benötigen, können Sie Folgendes verwenden:
%Vor%Oder bei Parametern:
%Vor%Tags und Links java multithreading ui-thread javafx