JavaでGUIを触っていて、重めの処理をしたときにGUIが固まってしまい、
処理がおわるまで反応しなくなったことがありました。
これを避けるには、処理を別スレッドにすれば良いということで、
マルチスレッド化をしましたので、それについて少しメモしておきます。
現在のスレッドと別のスレッドを用意して処理させるには、基本的に以下を書けばよいです。
【GUIのクラス内の処理】
Test test = new Test();
Thread thread = new Thread(test);
thread.start();
【重い処理を記述するクラス】
public Test implements Runnable{
...
public void run(){
hogehoge(); //何か重い処理
}
private void hogehoge(){
...
}
}
何をやっているのかというと、GUIクラスでは
Thread thread = new Thread(test)
の箇所で、Testクラスのインスタンスtestを使って、threadという新たなスレッドを作り、
thread.start();
で、test.run()をスレッドthread内で動かしています。
Testクラスでは、run()の中に、別スレッドで行わせたい処理hogehoge()を書いておき、
Runnableというインターフェースをimplements しておきます。
こうすることで、重い処理であるhogehoge()を別スレッドで呼び出すことができるため、
GUIが固まることを回避できます。
上記ではGUIクラスから別スレッドを呼び出しましたが、
当然ながら、GUIクラスを別スレッドとして生成してもよいでしょう。
また、わざわざ別クラスを用意するほどでもなかったりする場合、
以下のようにRunnable()クラスのインスタンスを作って、直接処理を記述することも可能です。
Thread thread = new Thread(new Runnable(){
public void run(){ hogehoge(); }
});
thread.start();