Tag: invokelater

invokeLater vs invokeAndWait with JTextArea

我有一个在多个线程上运行的Swing应用程序,我在EDT上创建了Swing组件。 Executor启动线程,在某些时候将文本插入JTextArea。 但是,与InvokeAndWait不同,InvokeLater并不总是执行追加。 当我收集它时,它是异步的,非阻塞的,但仍然应该进行追加。 怎么会这样? 谢谢

Java Swing EDT和并发

我只是想知道是否仍然需要确保invokeLater()Runnable的同步性。 我遇到了死锁,需要在保持并发性的同时克服它。 这是一个好代码的例子吗?: private String text; private void updateText() { SwingUtilities.invokeLater(new Runnable() { public void run() { synchronized(FrameImpl.this) { someLabel.setText(text); } } }); } 对于相当糟糕的示例感到抱歉,但我们必须假设text正被不同的线程修改,无法注入,并且依赖于正确的值。 这是正确的解决方案,还是通过将同步代码发送到未知的上下文中而无意中造成死锁问题? 谢谢。

为什么我应该使用单独的线程在JAVA中显示GUI

这个简单的问题让我很困惑。 您可以通过将frames的setVisible属性设置为true来显示JAVA GUI应用程序。 但在我在互联网上发现的几乎所有例子中,他们都使用一个单独的线程来做同样的事情。 他们做这样的事情, SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Frame().setvisible(true); //just take the idea of this line } }); 我发现这两种方法没有区别。 但必须有一些特殊的原因,这就是每个人都这样做的原因。 有人可以解释一下……谢谢!

如何在Java中创建“事件驱动的”后台线程?

我喜欢invokeLater()的简单性,用于将工作单元发送到AWT EDT。 有一个类似的机制可以将工作请求发送到后台线程(例如SwingWorker),但据我所知,这些机制没有任何类型的事件排队和调度机制,这是invokeLater()所依赖的。 所以相反,我最终给我的后台线程一个阻塞队列,其他线程向其发送消息,并且线程实际上运行一个接收循环,阻塞直到消息到达。 事实上,这可能正是人们如何在后台线程中实现类似EDT的行为(或者它会是什么?)。 另一方面,我喜欢简单地悬挂在那里的线程的简单性,只要碰巧从天空中某些看不见的事件调度队列发送到它就处理“工作水滴”。 Java是否提供了创建这种“事件驱动的工作线程”的方法? 毕竟,消息排队是正确的方法吗? 在相关的情况下,消息传递的invokeLater()技术有缺点吗?

JProgressBar无法正常工作

所以我设置的JProgressBar不按我想要的方式工作。 因此,每当我运行程序时,它立即从0变为100。 我尝试使用ProgressMonitor ,一个任务,并尝试了一个SwingWorker但我没有尝试过。 这是我的计划: int max = 10; for (int i = 0; i <= max; i++) { final int progress = (int)Math.round( 100.0 * ((double)i / (double)max) ); EventQueue.invokeLater(new Runnable() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(BandListGenerator.class.getName()).log(Level.SEVERE, null, ex); } jProgressBar2.setValue(progress); } }); } @MadProgrammer这是我尝试制作一个摇摆工作者并将每个名字写入文档并更新进度条。 […]

关于EDT(Java)

我已经在互联网上阅读了一些关于什么时候应该在EDT中运行的文章,以及什么时候不应该。 但是我仍然不确定我理解,所以我想问一些关于这个的问题: 在EDT 内默认运行哪些代码? 在EDT 之外默认运行哪些代码? 我什么时候应该使用InvokeLater(),以便默认情况下在EDT之外运行,将在其中运行? 什么时候应该阻止一段代码在EDT中运行(默认情况下),通过创建一个新线程并将该代码放入其中? 谢谢

SwingUtilities.invokeLater与SwingWorker 之间的区别?

有什么区别: //Some code, takes a bit of time to process (new SomeJFrame()).setVisible(true); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { (new SomeJWindow()).start();//Start a new thread } }); 和: class doGraphics extends SwingWorker { @Override public Void doInBackground() { //Some code, takes a bit of time to process (new SomeJFrame()).setVisible(true); return null; } @Override protected void […]

什么是SwingUtilities.invokeLater

可能重复: SwingUtilities.invokeLater做什么? SwingUtilities.invokeLater 我已经看过几百次这段代码了: public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } 现在我的问题是: invokeLater()做什么? 如果我只是在主线程中创建并显示我的GUI,会发生什么样的坏事?

SwingUtilities invokeLater的主要目的

我有这段代码 import javax.swing.SwingUtilities; public class Client1 { public static void main( String[] args ) { SwingUtilities.invokeLater( new Runnable() { public void run() { //new MyWindow( “Bayog” ); new MyWindowV2( “Bayog” ); } } ); } } 如果我不使用SwingUtilities有什么区别?

为什么InvokeLater导致我的JFrame无法正确显示?

好的,我已经阅读了网上的搜索结果,但我还没有找到问题的解决方案,也许我错过了一些简单的东西,因此我在这里…… 我有一个相当大的项目,处理维修业务的工单。 这是所有数据库连接,许多页面的代码和类。 但我只是在前端添加了一小段代码,实质上是在我们的笔记区域中检查新消息。 无论如何,我显示一个带有两个JLabel的简单JFrame ,而一个单独的线程查询数据库。 这一切都发生在程序的开始。 问题是我的小“请等待” JFrame提出了它的框架但没有胆量,没有背景,没有JLabel ,在等待期间(这是程序加载的其余部分,而不是数据库线程),显示后,但到那时它错过了它的观点。 我写了以下示例程序。 它显示一个简单的JFrame (CheckingMessagesGUI:一个带有两个JLabel的JFrame ,仅此而已)hibernate5秒然后显示Example(主程序) JFrame ,然后在这个例子中立即关闭( System.exit(0) ),当然我的真正的计划继续做更多。 我发现invokeLater似乎导致了这个问题。 一旦睡眠定时器用完,窗口就会显示,但显示它的代码是在Thread.sleep命令之前给出的,应该按照那个顺序完成了吗? 我的问题是为什么invokeLater会导致我的JFrame无法正确显示? 我的理解是invokeLater的目的是让项目在正确的AWT事件线程上运行,这会让我觉得这个窗口会被正确绘制。 无论如何,我确定我错过了一些明显的东西。 我在下面的代码中注释掉了invokeLater部分,它运行正常,如果你把它放回去它不… 提前谢谢了。 package javaapplication6; public class Example extends javax.swing.JFrame { public Example() { System.out.println(“Example started”); setBounds(100,100,200,200); System.out.println(“cmGUI instantiated”); CheckingMessagesGUI cmGUI = new CheckingMessagesGUI(); System.out.println(“Set cmGUI visible”); cmGUI.setVisible(true); cmGUI.validate(); try { System.out.println(“timer started”); […]