別のスレッドを使用して、Java で入れ子になった for サイクルを実行しようとしています (UI のフリーズを回避し、物事を簡単にするため):
public class scan2D extends Thread{
public void run(){
float data;
for (int y = 0; y<GUI.max_y; y++) {
for (int x = 0; x<GUI.max_x; x++) {
GUI.model.set(GUI.edaq.getdata());
}
}
GUI.model.save();
}
}
GUIオブジェクトにscan2dオブジェクトを作成し、GUIのスタートボタンを押すことで起動します。「モデル」オブジェクトが1回だけ更新され、最終的にすべてのデータが1つずつ更新されることを除いて、すべてが機能します。「edaq」からデータが読み込まれ、モデルに送信されたらすぐに更新したいと考えています。モデルはビューで観察されます。更新を瞬時に行うにはどうすればよいですか?
更新 アドバイスやコメントをお寄せいただきありがとうございます。申し訳ありませんが、問題の原因と思われるすべてのコードを含めていません。私は初心者です。単純化された最小限の「機能する」例を作成しましたが、これも症状を示しています。
package test;
public class GUI {
static Model model;
static scan2D scan2d;
public GUI() {
model = new Model();
scan2d = new scan2D();
scan2d.start();
}
public static void main(String[] args) {
new GUI();
}
}
class Model {
public void set(int data)
{
System.out.print(data);
}
}
public class scan2D extends Thread {
public void run(){
int data;
for (int y = 0; y<=10; y++) {
for (int x = 0; x<=10; x++) {
try {Thread.sleep(100);}
catch(InterruptedException ex){}
GUI.model.set(x+y);
}
}
}
}
100 ミリ秒の遅延で試してみると、最後に表示されるすべてのデータが netbeans 出力ウィンドウに同時に表示されます。1000 を使用すると動作し、出力にデータが 1 つずつ表示されます。表示だけの問題ですか?