Ich versuche, einen Hintergrunddienst einzurichten, der Massenladen von Transaktionsdaten aus einer CSV-Datei ausführen würde. Dieser Hintergrunddienst wird von einer Menüelementaktion initiiert, die einer Methode in der Controller/Presenter-Klasse zugeordnet ist.JavaFX2: Kann ich einen Hintergrund Task/Service anhalten?
Immer wieder tauchen in der csv-Datei einige Daten auf, für die keine Stammdaten in der Datenbank gefunden werden können. Dies würde normalerweise dazu führen, dass der Upload erstickt und fehlschlägt.
In solchen Fällen möchte ich in der Lage sein, den Hintergrunddienst seine Verarbeitung unterbrechen zu lassen und einen Dialog von einer Präsentationsklasse aufzurufen, um Benutzereingaben aufzunehmen. Die Benutzereingabe würde verwendet werden, um eine Masterzeile in der Datenbank hinzuzufügen, nach der der Hintergrunddienst von dort fortgesetzt werden sollte, wo er unterbrochen wurde (nicht vom Anfang der CSV-Datei, sondern von der Zeile, die den Fehler verursacht hat).
Ist dies in JavaFX möglich, vielleicht mit der API javafx.concurrent? Wie würde ich das machen?
Ausgezeichnet, das sieht so aus, als würde es den Job erledigen. Vielen Dank. –
Vielen Dank, dass Sie sich die Zeit genommen haben, eine Lösung zu finden. Eine Änderung scheint mein Problem zu lösen. Allerdings sehe ich ein sehr merkwürdiges Verhalten in dem von Ihnen bereitgestellten Beispielcode. Wenn ich die Eingabezeichenfolge ändern und das erste Token auf "VERMISST" setzen, hängt das Programm; Das Dialogfenster zur Eingabe von Benutzereingaben wird nicht angezeigt. Aber, wenn ich fortfahre, es zu debuggen (in NetBeans 7.2), funktioniert es ganz gut. Irgendeine Idee, was hier passiert? –
Es gab einen Fehler im Beispielcode. Das Beispiel verwendet 'container.getScene(). GetWindow()' innerhalb einer Aufgabe, die (korrekt) eine (nicht gemeldete) 'NullPointerException' ausgelöst hat, wenn der Container noch nicht zu einer Szene hinzugefügt wurde. Ich habe die Logikreihenfolge in dem Beispiel geändert, sodass die Aufgabe nicht gestartet wird, bis der Container, den es verwendet, der Szene hinzugefügt wurde (wodurch das Problem vermieden wird). [Aktualisierter Beispielcode verknüpft] (https://gist.github.com/jewelsea/4989970). – jewelsea