我会写一个代码的摘要,然后我会解释。
我有一个STARTER按钮,它可以启动一个程序和一个进度监视器
// from a button
actionPerformed()
// enable procedure control buttons pause and cancel at this point
SomeProcedure ProcTh = new SomeProcedure(aTable)
ProcTh.Start();
ProcessLog LogTh = new ProcessLog(aTable, aProgressBar)
LogTh.Start();
// inside try catch:
ProcTh.join();
LogTh.join();
这是被调用的过程线程的摘要:
class SomeProcedure extends Thread
JTable aTable = null;
// the executable part
public void run()
for (int i=0;i<aTable.getRowCount();i++)
// process data in a row
while (Paused &&! Canceled)
wait(); // inside a try catch
if (Canceled)
i=aTable.getRowCount()-1; // maybe a break is better??
// the constructor part initializes things
public SomeProcedure (JTable T)
aTable = T;
这是被调用的监视器线程的摘要:
class ProcessLog extends Thread
JTable aTable = null;
JProgressBar aBar = null;
// the executable part
public void run()
while (sofarlong<totallong)
aBar.setValue((int)(sofarlong/totallong));
// also update values in aTable
// the constructor part
public ProgressLog (JTable T, JProgressBar B)
aTable = T;
aBar = B;
我没有编译错误,但当我单击STARTER时,它会挂起,按下它,暂停和取消按钮将不会启用。我可能做错了什么。这是在java中从线程更新图形用户界面控件的最好方法吗?这是显示另一个线程的进度的最好方式吗?我注意到我不能从线程中的run访问图形用户界面控件,这就是为什么我把它们传递给创建线程的原因。
SomeProcedure在SoFarLong上写入,而它正在处理表rown,而ProcessLog只会读取它。和SomeProcedure和ProcessLog一样,它是图形用户界面级别的常见变量,叫做GUI.java
一如既往,任何帮助或指导都是非常感谢的。
发布于 2018-09-27 05:28:21
调用Thread.join()
将会阻塞,直到线程结束。通过在您的按钮处理程序中调用它,您的按钮处理程序直到该过程完成后才会返回。
https://stackoverflow.com/questions/52526207
复制相似问题