上記のシナリオでは、ファイルを処理するために OSXAdapter ライブラリを組み込んだ後、Java アプリケーションでパフォーマンスの問題と異常な動作が発生します。 macOS でイベントをドロップします。この問題は、時間のかかるタスクの実行中にイベント ディスパッチ スレッド (EDT) をブロックすることが原因である可能性があります。
これを解決するには、EDT でモデルを更新しながら、これらのタスクを別のスレッドで実行するようにアプリケーションを変更する必要があります。 。 SwingWorker は、 process() メソッドを使用して、これに適したメカニズムを提供します。あるいは、提供されたコードに示されているように、invokeLater() を使用することもできます。
間違ったアプローチ:
推奨アプローチ:
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() { // .... } }
以上がファイルドロップに OSXAdapter を使用すると、Java アプリが遅延したりクラッシュしたりするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。