为了账号安全,请及时绑定邮箱和手机立即绑定

等待多个摇摆工人

等待多个摇摆工人

开满天机 2019-06-19 16:42:46
等待多个摇摆工人请考虑以下代码片段:import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.lang.reflect.InvocationTargetException;import javax.swing.*;public class TestApplet extends JApplet{     @Override     public void init()     {         try         {             SwingUtilities.invokeAndWait(new Runnable()             {                 @Override                 public void run()                 {                     createGUI();                 }             });         }         catch(InterruptedException | InvocationTargetException ex)         {         }     }     private void createGUI()     {         getContentPane().setLayout(new FlowLayout());         JButton startButton = new JButton("Do work");         startButton.addActionListener(new ActionListener()         {             @Override             public void actionPerformed(ActionEvent ae)             {                 JLabel label = new JLabel();                 new Worker(label).execute();             }         });         getContentPane().add(startButton);     }     private class Worker extends SwingWorker<Void, Void>     {         JLabel label;         public Worker(JLabel label)         {             this.label = label;         }         @Override         protected Void doInBackground() throws Exception         {             // do work             return null;         }         @Override         protected void done()         {             getContentPane().remove(label);             getContentPane().revalidate();         }     }}下面是向applet添加一个标签,它显示工作线程的一些中间结果(使用发布/处理方法)。最后,标签从applet的窗格中移除。我的问题是,我如何创建多个标签,每个标签都有自己的工作线程,并在它们完成后删除它们?提前谢谢。最新情况:我希望这能澄清我的问题。当所有的工人都完成了他们的任务,而不是在每个工人完成任务之后,我希望所有的标签立即被移除。
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

您所拥有的代码已经在一定程度上做到了这一点。单击按钮时,需要将标签实际添加到内容窗格中。就像这样:

 JLabel label = new JLabel();
 getContentPane().add(label);
 getContentPane().validate();
 new Worker(label).execute();

在标签中添加一些文本可能是个好主意,这样当它被添加到屏幕上时,您就可以看到它了。

 JLabel label = new JLabel("Hello...I am here");

最后,在doInBackplace()方法中,您可以在某些任务运行时添加一些代码来更新标签:

 for(int i = 0;i < 100; i++){
            Thread.sleep(20);
            label.setText("Counting..." + i);
  }

这样,您就可以实际看到任务正在运行。如果您多次单击该按钮,则会看到多个标签,每个标签都会在任务完成后消失。


查看完整回答
反对 回复 2019-06-19
  • 2 回答
  • 0 关注
  • 378 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信