为什么要把GUI更新代码放在SwingUtilities.invokeLater()中?为什么Swing本身不能在内部处理它?为什么调用者必须关心swing如何处理UI更新? 最佳答案 Swing对象arenotthreadsafe.顾名思义,SwingUtilities.invokeLater()允许在稍后的某个时间点执行任务;但更重要的是,任务将在AWT事件调度线程上执行。使用invokeLater时,任务异步执行;还有invokeAndWait,直到任务执行完毕才会返回。关于不使Swing线程安全的决定的一些信息可以在这里找到
我的问题与SwingUtilities.invokeLater有关。我应该什么时候使用它?每次需要更新GUI组件时都必须使用吗?它究竟是做什么的?是否有替代方案,因为它听起来不直观并且添加了看似不必要的代码? 最佳答案 DoIhavetouseeachtimeIneedtoupdatetheGUIcomponents?不,如果您已经在事件调度线程(EDT)上,则不会,这在响应用户发起的事件(例如点击和选择)时总是如此。(actionPerformed方法等总是由EDT调用。)如果您不是在EDT上但是想要进行GUI更新(如果您想从某个
我的问题与SwingUtilities.invokeLater有关。我应该什么时候使用它?每次需要更新GUI组件时都必须使用吗?它究竟是做什么的?是否有替代方案,因为它听起来不直观并且添加了看似不必要的代码? 最佳答案 DoIhavetouseeachtimeIneedtoupdatetheGUIcomponents?不,如果您已经在事件调度线程(EDT)上,则不会,这在响应用户发起的事件(例如点击和选择)时总是如此。(actionPerformed方法等总是由EDT调用。)如果您不是在EDT上但是想要进行GUI更新(如果您想从某个
我最近开始学习和探索Java中GUI编程的基础知识。已经编程了一段时间,我只做过后端工作或工作,因此我最接近用户界面的是命令控制台(我知道很尴尬)。我正在使用Swing,据我所知,通过扩展,我也在使用AWT。我的问题是基于这段代码:java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newframe.setVisible(true);}});我已经研究了一段时间,因为我想完全理解这段奇怪的代码,并且多次遇到“事件调度线程”这个术语。如果我错了,请纠正我,但据我所知;它与使用多个线程以及JavaSwing如何解释这些
我最近开始学习和探索Java中GUI编程的基础知识。已经编程了一段时间,我只做过后端工作或工作,因此我最接近用户界面的是命令控制台(我知道很尴尬)。我正在使用Swing,据我所知,通过扩展,我也在使用AWT。我的问题是基于这段代码:java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newframe.setVisible(true);}});我已经研究了一段时间,因为我想完全理解这段奇怪的代码,并且多次遇到“事件调度线程”这个术语。如果我错了,请纠正我,但据我所知;它与使用多个线程以及JavaSwing如何解释这些
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatdoesSwingUtilities.invokeLaterdo?SwingUtilities.invokeLater这段代码我已经看过几百遍了:publicstaticvoidmain(String[]args){javax.swing.SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){createAndShowGUI();}});}现在我的问题是:invokeLater()做了什么?如果我只是在主线程中创建和显示我的GUI,会发生什么
我知道使用这个方法,将runnable参数提交给系统EventQueue。但是所有的GUI更新都应该使用这种方法来完成吗?我的意思是,如果我想说,更改JButton的文本,我应该使用这样的东西吗:java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){jButton1.setText("changedtext");}});如果我应该使用这种方法,我们可以使用什么模式来避免这种重复代码? 最佳答案 你只需要使用invokeLater当您想从另一个不是UI线程(事件调度
从JRE1.7.0_21升级到1.7.0_25-b15后,当我的应用程序从JavaWebStart运行时,它开始在SwingUtilities.invokeLater(...)中抛出NullPointerException。令人惊讶的是,当它作为独立应用程序(在JWS之外)执行时,效果很好。这是堆栈的顶部:Exceptioninthread"AWT-EventQueue-2"java.lang.NullPointerExceptionatsun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1011)atsun.awt
有时我觉得使用AsyncTask对任务来说太过分了,我正在寻找类似的功能,如Android中的SwingUtilities.invokeLater。因为我只想执行一行代码,没有必要为此创建一个新类。 最佳答案 也许你正在寻找:Activity.runOnUiThread(Runnableaction) 关于java-android中的类似功能SwingUtilities.invokeLater?,我们在StackOverflow上找到一个类似的问题: http
经过多年的Java编程,我总是习惯于创建我的main()方法,如下所示:publicstaticvoidmain(String[]args){runProgram();}但最近我从网上研究了一些代码,有时看到这个而不是上面通常使用的main():publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){runProgram();}});}我只是想知道:为什么要使用这个而不是通常的main()方式?我试一试看不出有什么不同。这两种方式有什么区别?感谢您阅读我和您的