SwingUtilities

本文介绍了如何使用SwingUtilities获取组件对应的窗口,并探讨了Swing框架下的多线程处理方式。通过创建工作线程来处理耗时的任务,确保用户界面响应性。文章详细解释了如何使用SwingUtilities.invokeLater和invokeAndWait实现同步和异步任务调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SwingUtilities

[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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值