私は、サーバーとクライアントの両方として機能するJavaプログラムを作成しています。無関係のビットを残して、メイン、サーバー、クライアントという3つのクラスがあります。 Mainはメニューを設定し、mainメソッドを含んでいます。サーバーとクライアントはそれぞれサーバーとクライアントのアルゴリズムを保持します。JButton ActionListenerから重いアルゴリズムを呼び出す方法
私がしようとしているのは、押されたボタンに応じて、サーバークラスとクライアントクラスとそれらのGUIからアルゴリズムを呼び出すことです。サーバーを呼び出すコードは、現在次のようになります。
serverButton = new JButton();
serverButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
server.showGUI();
server.run();
}
});
問題はserver.run()
はかなり長い間継続的に実行し、重い物を持ち上げるのがたくさんあるということです。これは、私がEDTからメソッドを呼び出しているので、私の理解からですGUIをバグアウト。
メインスレッドからこのメソッドを呼び出すにはどうすればよいですか? SwingWorker
を作成し、server.run()の最後までそこに置く必要がありますか?
をhttps://docs.oracle .com/javase/tutorial/uiswing/concurrency/worker.html)は1つの方法です。別のアプローチが示されている[ここ](http://stackoverflow.com/a/3245805/230513)。 – trashgod