これは私の最初の投稿です。
私はネットビーンズにいます。ボタンなどでウィンドウを作りました。
次のような SimpleThread というクラスがあります。
public class SimpleThread extends Thread {
public SimpleThread()
{
}
@Override
public void run()
{
}
また、simplethread (TimerThread、MouseGrabThread) を拡張するさまざまな種類のサブクラス スレッドがあります。
public class MouseGrabThread extends SimpleThread{
private Point pt;
private JTextField x, y;
public MouseGrabThread(JTextField x, JTextField y)
{
super();
this.x = x;
this.y = y;
}
@Override
public void run()
{
while(this.isAlive())
{
int[] xyVal = new int[2];
xyVal = getCoords();
x.setText("" + xyVal[0]);
y.setText("" + xyVal[1]);
}
}
public int[] getCoords()
{
Point pt = MouseInfo.getPointerInfo().getLocation();
int[] retArr = new int[2];
retArr[0] = (int)pt.getX();
retArr[1] = (int)pt.getY();
return retArr;
}
public class TimerThread extends SimpleThread {
private JTextArea label;
private int time;
public TimerThread(JTextArea label, int time)
{
super();
this.label = label;
this.time = time;
}
@Override
public void run()
{
int counter = time;
while(counter != -1)
{
label.setText("You have: " + counter + " seconds until the timer ends!\n");
counter--;
try {
this.sleep(1000);
} catch (InterruptedException ex) {
System.out.println("Thread Interrupted");
}
}
stop();
}
私の UI ウィンドウ クラスには、次のようなものがあります。
private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
SimpleThread timer = new TimerThread(jTextArea1, 10); //This counts down from 10 seconds and updates a status text box each second
SimpleThread mouseGrab = new MouseGrabThread(jTextField1, jTextField2); //This grabs mouse coords and updates two boxes in the UI.
timer.start();
if(timer.isAlive())
{
mouseGrab.start();
}
while(timer.isAlive())//######
{
if(!mouseGrab.isAlive())
{
mouseGrab.start();
}
}
}
ボタンを押すと、プログラムが 10 秒間フリーズします。
私がマークした行 (//#####) は、メイン スレッドで実行されているため、タイマーの期間中 UI がフリーズする原因となっている行だと思います。これを修正する方法がわかりません。
プログラミングの知識が不足していることをお許しください。大学でデータ構造に関する非常に簡単なコースを受講しているときに、自分でスレッドを作成しているところです。可能であれば、答えをできるだけ「ばかにする」ことができますか?
また、私はこれを行うのがひどいことを知っていますが、良くない場合でも stop() 関数を呼び出します (私を撃たないでください。他に方法がわかりません!)これは私にとってそれをうまく行う方法についてです、素晴らしいです!