arr.forEachIndexed { index, row ->
if (index in row.indices) {
println("value at [$index, $index]: ${row[index]}")
}
}
并采用表单:
public class Worker extends SwingWorker<Integer, String> {
private JLabel screen;
public Worker(JLabel screen) {
this.screen = screen;
}
@Override
protected Integer doInBackground() throws Exception {
for (; ; ) {
publish(String.valueOf(Calendar.getInstance().getTimeInMillis()));
}
}
@Override
protected void process(List<String> chunks) {
screen.setText(chunks.get(0));
}
}
我试图用Tread编写相同的代码,但是它也不起作用。单击stopButton之后,控制台输出:
true
true
因此,工作人员已完成操作,但程序仍继续显示毫秒。什么是死亡后的生活?并且在使用Thread的情况下:方法isAlive()返回“ false”。
答案 0 :(得分:0)
根据您的代码,看起来您需要一个带有循环的工作程序来保持运行,直到主线程告诉它停止运行为止,这是通过worker.cancel(true);
完成的。问题是您正在取消它,但是没有做任何信号通知循环本身停止迭代。要解决此问题,您应该更改
for (; ; ) {
publish(String.valueOf(Calendar.getInstance().getTimeInMillis()));
}
到
while(!isCancelled()){
publish(String.valueOf(Calendar.getInstance().getTimeInMillis()));
}
请注意Java文档中“ isCancelled”的措辞:
isCancelled()
如果此任务在正常完成之前被取消,则返回true。 由于循环永远不会自行关闭,因此永远不会正常完成。