SwingUtilities

SwingUtilities

public static Window windowForComponent(Component c)

该方法用于获得当前c组件的所来源的window.
[举例]
如我们需要在某一段较长的处理时间告知用户等待,需鼠标设置成忙状态

      Window win = SwingUtilities.windowForComponent(this));
      win.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

       //... do a lot of job


      win.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));


Swing多线程
Swing多线程目的是保证多个任务并发进行。
往往有时某个Swing在处理费事工作时,用户可以先进行其他工作,回头再来过问结果。我们可以把费事的工作放入一个线程中。叫工作线程

Work Thread
class GuiRunner implements Runnable
  {
    Object input

    GuiRunner( Object input)
    {
      this.input = input;
    }
    public void run()
    {
       //尽情去做一些费事的工作,不用担心时间太长而block了用户做其他的事情
    }
  }


随即,我们可以将任务明确的工作线程交给事件派发线程等待调用,调用方法有2种,同步和异步的
如果同步,
SwingUtilities.invokeLater(new GuiRnner("I go to another world."));
//code here will not wait for the work thread finish to run.
//调用的后续代码不会等待调用结果,是并发的。如果工作线程中所进行的工作和下一步执行代码完全不搭界,各做各的。



SwingUtilities.invokeAndWait(new GuiRunner("hey, I will prepare some hard work for next step"));
//code here will wait until the work thread finish to run.
//调用的后续代码会等待调用结果,也就是说是顺序进行的。如果工作线程所进行的工作是下一步执行代码的前提,只要一步步来


hah

你可能感兴趣的:(多线程,thread,c,工作,swing)