Im beschriebenen Szenario treten bei einer Java-Anwendung Leistungsprobleme und abnormales Verhalten auf, nachdem die OSXAdapter-Bibliothek zur Dateiverarbeitung eingebunden wurde Drop-Ereignisse auf macOS. Das Problem ist wahrscheinlich darauf zurückzuführen, dass der Event Dispatch Thread (EDT) blockiert wird, während zeitaufwändige Aufgaben ausgeführt werden.
Um dieses Problem zu beheben, sollte die Anwendung so geändert werden, dass diese Aufgaben in einem separaten Thread ausgeführt werden, während das Modell auf dem EDT aktualisiert wird . SwingWorker bietet mit seiner Methode „process()“ einen geeigneten Mechanismus hierfür. Alternativ kann invokeLater() wie im bereitgestellten Code veranschaulicht verwendet werden.
Falscher Ansatz:
Empfohlener Ansatz:
public class Controller extends SwingWorker{ public Controller() { execute(); // Starts the SwingWorker thread } @Override // Perform the time-consuming tasks (i.e., adding rows to the table) in a background thread. protected Void doInBackground() { // .... return null; } @Override // Update the GUI on the EDT after the background task is complete. protected void done() { // .... } }
Das obige ist der detaillierte Inhalt vonWarum verzögert sich meine Java-App oder stürzt ab, nachdem ich OSXAdapter zum Löschen von Dateien verwendet habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!