对于我的应用程序,我必须构建一个小的自定义时间自动收报机,在我告诉它的任何延迟之后,它会在我的textArea中写入新值。问题是自动收报机完全运行直到终止时间,然后打印所有值。如何在代码运行时更改文本区域。
while(tick<terminationTime){
if ((System.currentTimeMillis()) > (msNow + delay)){
msNow = System.currentTimeMillis();
tick = tick + 1;
currentTime.setText(""+tick);
sourceTextArea.append(""+tick+" " + System.currentTimeMillis() +" \n");
}
}
currentTime和sourceTextArea都是文本区域,并且在while循环结束后都会更新。
答案 0 :(得分:1)
也许尝试使用SwingWorker
类(在javadocs中查看)和随附的get()
方法。
答案 1 :(得分:1)
这是一个适用于2个线程的示例。
这是更新主题。
public class updateThread extends Thread
{
textAreaTest aa;
Integer i;
public updateThread(textAreaTest abc)
{
aa = abc;
i = 0;
}
@Override
public void run()
{
while(true)
{
try
{
sleep(1000);
}
catch (InterruptedException e)
{
//e.printStackTrace();
}
aa.setText(i.toString());
i++;
}
}
}
这是Jpanel
import java.awt.Container;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class textAreaTest extends javax.swing.JFrame
{
JTextArea area = new JTextArea();
public static void main(String[] args)
{
new textAreaTest();
}
public textAreaTest()
{
updateThread thread = new updateThread(this);
JPanel panel = new JPanel();
panel.add(area);
this.setSize(100, 100);
Container c = this.getContentPane();
c.add(area);
this.pack();
this.setVisible(true);
thread.start();
}
public void setText(String text)
{
area.setText(text);
}
}