问题标签 [invokelater]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
5115 浏览

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

好的,我已经阅读了整个网络的搜索,但我还没有找到解决我的问题的方法,也许我错过了一些简单的东西,因此我在这里......

我有一个相当大的项目,它处理维修业务的工作订单。它都是连接数据库的,很多很多页的代码和类。但我只是在前端添加了一小段代码,基本上检查我们的笔记区域中的新消息。

无论如何,我用两个JLabel显示一个简单的JFrame ,而一个单独的线程查询数据库。这一切都发生在程序开始时。问题是我的小“请稍候” JFrame在等待期间(这是程序加载的其余部分,而不是数据库线程)提出了它的框架,但没有胆量,没有背景,也没有JLabel ,后记它显示,但到那时它就失去了意义。

我编写了以下示例程序。它显示一个简单的JFrame(CheckingMessagesGUI:一个带有两个JLabel的JFrame,仅此而已)休眠 5 秒,然后显示示例(主程序)JFrame,然后在此示例中立即关闭(),当然我的真实程序继续执行多很多。我发现这似乎是导致问题的原因。一旦睡眠定时器用完,窗口就会显示出来,但是显示它的代码是在命令之前给出的,应该按照这个顺序完成吗?System.exit(0)invokeLaterThread.sleep

我的问题是为什么会invokeLater导致我的JFrame无法正确显示?

我的理解是,目的invokeLater是让项目在正确的 AWT 事件线程上运行,这会让我认为这个窗口会被正确绘制。无论如何,我确定我遗漏了一些明显的东西。我在下面的代码中注释掉了这invokeLater部分,它运行正常,如果你把它放回去它不会......

提前谢谢了。

更新:为了澄清,我意识到Thread.sleep()会阻止一切,但我的 CheckingMessagesGUI 不应该在我调用睡眠之前已经完全绘制吗?这就是问题所在。

0 投票
5 回答
6975 浏览

java - 谁能解释一下这个 javax swing 方法?

我很难理解这个简单的代码:

谁能解释一下它是如何工作的(简单来说,因为我是新手)?这个短代码是这个大代码的一部分。

更具体地说,我有以下问题:

  1. “public void run”是否定义了一种新方法?如果是这样,为什么在另一个方法中定义它(参见“更大的代码”以供参考)?
  2. 如果“public void run”定义了一个新方法,那么定义一个只包含一行代码(createAndShowGUI)的方法的原因是什么?
  3. “invokeLater”有什么作用?这实际上是我最复杂的问题。

我想再强调一次,我是一个新手,使用“特殊”和“技术”词会产生更多问题。

如果您决定帮助我,请提前感谢您!

0 投票
3 回答
1299 浏览

java - 使用 invokeLater 一个一个地显示对话框

在 2 个不同的动作监听器中,当满足某些条件时会显示一个对话框。如果两个动作侦听器都需要显示对话框,则会同时显示 2 个对话框。但我希望他们一一展示。

简化代码:

这 2 个“SwingUtilities.invokeLater”调用位于不同的类中。

0 投票
3 回答
2153 浏览

java - Java SwingUtilities.invokeLater

嗨,我设计的这个应用程序的最后阶段有点痛苦。

基本上,当用户单击按钮时,我希望光标变为“等待”版本,然后一旦后台进程(task.execute)完成,光标就会恢复正常。

task.execute 不在同一个类中,所以我不能直接调用“gui.setCursor”,因为它不能将 GUI 识别为变量。

不知道该怎么做,所以任何建议都会很棒

感谢:D

0 投票
3 回答
814 浏览

java - 黑莓 - 线程没有响应

很抱歉,这个问题有点含糊,但我无法从调试中获得任何有用的信息。

我有一个使用 new Thread().Start 调用的线程,然后它将运行一小段时间,我收到以下消息:

未捕获的异常:应用程序“我的应用程序名称(201)”没有响应;进程终止

现在令人沮丧的是我能够运行相同的进程但没有线程,这会锁定我的应用程序,但我可以从我的 Eclipse 控制台看到它的工作没有错误。所以我知道他们不是我在线程上使用的函数的错误。

我认为问题可能在于我使用“InvokeLater”函数来更新我的 GUI 与线程进程,我非常努力地发送垃圾邮件,我担心它会破坏我的线程。

有什么建议么?

为了扩展我的帖子,问题是由于我从我的另一个线程中调用了这个代码:-

这正在建立一个队列,该队列很快使我的应用程序崩溃。

我对该选项的解决方案是通过将此代码添加到我的函数中来使用事件线程:-

0 投票
2 回答
1318 浏览

java - Java Swing EDT 和并发

我只是想知道是否仍然需要确保 invokeLater() Runnable 中的同步性。

我遇到了死锁,需要在保持并发性的同时克服它。

这会是好代码的一个例子吗?:

抱歉这个相当糟糕的例子,但我们必须假设它text正在被不同的线程修改,不能被注入,并且依赖于正确的值。

这是正确的解决方案还是我会通过将同步代码发送到未知上下文中无意中造成死锁问题..?

谢谢。

0 投票
4 回答
2506 浏览

java - Java 线程如何与 invokeLater() 同步?

我有一个非 GUI 线程,它使用

IBM1622GUI 的构造函数的一部分为自己实例化了一个“模型”,我的非 GUI 线程需要访问它:

我的非 GUI 线程与“稍后调用”的新 GUI 同步的正确方法是什么?(当然,如果没有同步,IBM1622GUI.getModel()只会返回 null。)

0 投票
2 回答
3127 浏览

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

我喜欢将invokeLater()工作单元发送到 AWT EDT 的简单性。最好有一个类似的机制来将工作请求发送到后台线程(例如 SwingWorker),但据我了解,这些没有任何类型的事件队列和调度机制,这正是 invokeLater() 所依赖的。

因此,相反,我最终为我的后台线程提供了一个阻塞队列,其他线程向该队列发送消息,并且线程本质上运行一个接收循环,阻塞直到消息到达。

事实上,这可能正是人们在后台线程中实现类似 EDT 行为的方式(或者会这样吗?)。另一方面,我喜欢简单的线程,它只是惰性地悬挂在那里,每当它们碰巧从天空中一些看不见的事件调度队列被调度到它时处理“工作液滴”。Java 是否提供了一种方法来创建这种“事件驱动的工作线程”?还是消息队列是正确的方法呢?与此相关的是invokeLater(),消息传递技术是否存在缺点?

0 投票
2 回答
3000 浏览

java - SwingUtilities.invokeLater() 的 JavaScript 等价物

在 Javascript中是否有任何等效于 Java 的invokeLater()方法?SwingUtilities

更新 1

那么,setTimeout()零延迟会和 完全一样invokeLater()吗?

0 投票
5 回答
1000 浏览

java - 动态 JTree 和 SwingUtilities.invokeLater() 什么都不做

为了创建我的动态 JTree,我正在阅读本网站“4.2 OutlineNode.java”一章中关于动态 JTrees 的教程

现在我已经实现了它,并且认识到在 GUI 线程中加载数据需要很长时间并且也很丑陋。因此我添加了一个线程来扩展子元素,然后将TreeNode元素添加到树中。

没有线程它可以正常工作。如果我添加线程并将add-calls 放入 a SwingUtilities.invokeAndWait(...),则子项似乎已扩展,但它们在树中不可见。

我已经在树上尝试过 - 没有任何效果revalidate()repaint()

知道如何使这些元素可见吗?

先感谢您。