|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的
在基于JavaSwing举行图形界面开辟的时分,常常碰到的就是Swing多线程成绩。我们能够想一想一下,假如必要在一个图形界面上显现良多数据,这些数据是经由长工夫、庞大的查询和运算失掉的。假如在图形界面的统一个线程中举行查询和运算事情则会招致一段工夫界面处于逝世机形态,这会给用户带来不良的互动感觉。为懂得决这个成绩,一样平常会独自启动一个线程举行运算和查询事情,并随时更新图形界面。这时分,另外一个成绩就呈现了,大概不但没有办理本来偶然逝世机成绩,还大概招致程序完全逝世失落。侥幸的是在JDK中潜伏了一其中断程序的快速键,就是CTRL+BREAK,这个快速键Sun并没有在文档中发布。假如在命令行形式下启动Java程序,然后按CTRL+BREAK键,会失掉仓库的跟踪信息。从这些跟踪信息中就能够晓得详细激发逝世机的地位了。
当一个程序发生逝世锁的时分,你必定会但愿尽快找到缘故原由而且办理它。这时候候,你一样平常的精神会用在查找激发逝世锁的地位,另外一半的精神会用于对仓库举行跟踪一断定激发逝世锁的缘故原由。可是在JavaSwing程序中,你的一切勉力大概都是没有代价的。这是由于Java对Swing的多线程编程有一个特别请求。就是在Swing里,只能在与Swing不异的线程里对GUI元件举行修正。
也就是说,假如你要实行相似于jLabel1.setText("blabla")代码,必需在Swing线程中,而不同意在其他线程傍边。假如必需在其他线程中修正元件,可使用相似一下体例办理:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jLabel1.setText("blabla");
}
}
invokeLater办法固然外表偶然间提早实行寄义,可是实践上几近没有任何影响,大概在几毫秒以内就会被实行。别的另有一个invokeAndWait办法,除非特别必要,不然几近是不必的。
在不利用invokeLater的情形下,招致革新成绩是能够了解的,可是招致逝世锁就长处使人匪夷所思了。侥幸的是,不是任什么时候候都必要挪用改办法,这是由于年夜多半情形下,我们都是在与Swing统一个线程里举行界面更新。比方监听按钮点击事务的ActionListener.actionPerformed办法就是运转在与Swing不异的线程中的。可是假如在回调类中援用了另外一个类,而且是不属于AWT/Swing的,那末了局就很难断定了。以是说利用invokeLater应当是最平安的。
必要注重的是,在invokeLater做的任何事变,城市招致Swing线程窗口绘制事情停息上去,期待invokeLater事情停止。以是不要在invokeLater举行耗时操纵,只管只实行那些界面绘制相干的事情。能够经由过程代码重构,将那些与界面更新相干的代码会合起来一致处置。
一个倡议是那些在Swing中利用的类举行公道的计划。代码实行前判别是不是处于Swing线程傍边(利用SwingUtilities.isEventDispatchThread()办法),假如不是,则必要经由过程SwingUtilities.invokeLater(Runnable)实行,不然则间接实行代码。可是这提及来复杂,可是实践操纵会碰到良多坚苦。
在1995年5月23日以“Java”的名称正式发布了。 |
|