SwingUtilities
[b]public static Window windowForComponent(Component c)[/b]
该方法用于获得当前c组件的所来源的window.
[举例]
如我们需要在某一段较长的处理时间告知用户等待,需鼠标设置成忙状态
Swing多线程
Swing多线程目的是保证多个任务并发进行。
往往有时某个Swing在处理费事工作时,用户可以先进行其他工作,回头再来过问结果。我们可以把费事的工作放入一个线程中。叫工作线程
[b]Work Thread[/b]
随即,我们可以将任务明确的工作线程交给事件派发线程等待调用,调用方法有2种,同步和异步的
如果同步,
[color=red]hah[/color]
[b]public static Window windowForComponent(Component c)[/b]
该方法用于获得当前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在处理费事工作时,用户可以先进行其他工作,回头再来过问结果。我们可以把费事的工作放入一个线程中。叫工作线程
[b]Work Thread[/b]
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.
//调用的后续代码会等待调用结果,也就是说是顺序进行的。如果工作线程所进行的工作是下一步执行代码的前提,只要一步步来
[color=red]hah[/color]