问题标签 [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.
java - Java Swing 中的 EventQueue.invokeLater
我试图了解这个线程的真正目的。我读过书籍、文章,但并不清楚 EventQueue 线程负责什么。我见过很多例子,有时用这个,有时不用。据我了解,该线程负责所有 GUI 操作,例如创建窗口、组件、从 OS API 调用本机函数和其他内容。因此,每次我更改 GUI 的某些部分时,我都应该将此操作传递给队列。所以使用队列应用程序默认有两个线程主线程和事件调度线程。所以我所有的业务逻辑都应该在主线程中执行(或从主线程创建新线程)和 EventQueue 中的所有 gui 操作(例如向表中添加新项目,更改标签更新列表中的文本)。此外,我应该在 EventQueue 中创建主窗口的实例(类扩展 jframe)吗?
我对吗 ?如果不是请解释。提前感谢大家。
java - javax.swing.SwingUtilities.invokeLater 是必要的吗?
所以我看过无数不同的GUI教程,都说要使用这段代码:
尽管我可能不太明白这到底是做什么的,但由于我对 GUI 有点陌生,但我确实了解它的基本功能......或者我是这么认为的。但后来我,作为一个实验,把它全部删掉,然后就离开了:
它似乎奏效了。所以现在我有一个问题:保留我的第一段代码而不是仅仅使用第二段代码的目的是什么,而第二段代码看起来也一样好用?如果有必要,如果我不使用它会怎样?
java - java从另一个线程更新UI组件
我找到了很多关于我的问题的答案,但我仍然不明白为什么我的应用程序没有抛出任何异常。我在 NetBeans 8 中创建了一个新的 java 表单应用程序。我的表单在 main 方法中创建并显示,如下所示:
因此,这个新的 Runnable 创建了新的 MainForm 并将其设置为可见。
然后,在我的代码中,我启动了更新一些 jButtons 和 jTextFields 的新线程。下面的代码:
还有其他像上面这样开始的线程,我得到不同的值,这些值在上面的线程中更新。
我的问题是为什么我的代码不会对从另一个线程更新的 UI 元素抛出任何异常?我没有使用SwingUtilities.invokeLater(new Runnable() { //code here });
而且我的代码执行完美......
谢谢!
java - 在java中创建单独的线程的查询?
下面是实际问题代码的编译程序副本,
我想if{}
在单独的线程上运行 main() 中的块。因为这两条线,
无需等待if(){}
块完成
另一个问题是,专家建议在事件线程上运行确认对话框方法。
请帮我!!!!
java - invokeLater 未按预期工作(JButton 从不释放)
我有:
- 一个带有 JButton 的 JFrame。
- 一个单独的 Canvas 子类来显示动画。
我希望在按下 JButton 时调出一个新的 JFrame,显示 Canvas 子类的动画。
我现在面临的问题是新的 JFrame 出现了,但是它没有机会渲染任何东西,并且主框架上的 JButton 保持按下状态。我认为这背后的逻辑是 EDT 还没有完成它的工作,例如显示 JButton 已释放,因此没有机会运行动画方法并最终陷入死锁。
这个逻辑在过去对我很好,因为我通过创建一个新线程来完成这项工作,但是最近了解了更多关于 Java、线程和 Swing 的知识,我开始知道所有与 Swing 相关的事件都必须在一个线程上处理:EDT .
这让我对我之前如何让它工作感到困惑,但让我相信使用 invokeLater 会帮助解决问题;因为使 JFrame 可见并显示动画的工作将放置在队列的末尾,允许 JButton 释放等。但是我没有运气;我完全误解了什么吗?
谢谢!
(也请不要评论我使用 Canvas 类而不是 JPanel,我有我的理由)。
示例代码:
Test5(带有 main 方法的类)。
CanvasClass(画布子类)
java - 第一个 JFrame 应该使用“invokeLater”创建还是可以直接从 main 创建?
我最近开始学习如何在 Java 中使用 Swing 和图形,并且遇到了两种不同的 GUI 设计方法。
1) 将程序的 main 方法放在 JFrame 类的实例中。
2) 拥有一个在 main 方法结束时调用 SwingUtilities.invokeLater() 的类,以延迟处理图形的线程,直到 main 方法初始化之后。
例如 1。
例如 2。
像方法 2 中那样使程序线程安全有多重要?另外,每种方法的优缺点是什么?即你什么时候会使用一种方法而不是另一种方法?等等
java - Java SwingUtilities.invokeLater() 非法开始表达式错误
我遇到了一个不寻常的问题。我已经提交了我的评分代码,似乎当我的教授编译/运行我的 Java 程序时,它不会在她的计算机上运行。我在 Windows 和 Mac 机器上都试过了,它运行和编译都很好。我猜这个问题是由于JDK过时造成的。如果你想要我项目的全部代码(有点长),我可以提供。她收到以下错误:
我相信这个错误是由于语法造成的,但是当我在多个操作系统上的多个 IDE 中运行它时,它永远不会显示该错误。她和我做的一模一样。
javafx - Swing 应用程序中的 Java Fx:JFxPanel 已添加到 JPanel,直到鼠标单击 JPanel 后才会部署
我在 Swing 应用程序中使用 JavaFx:JFxPanel 的实例已添加到 JPanel 中,直到鼠标单击 JPanel 后才会部署。
JavaFx 面板带有 CSS 并使用 FXML。加载 XML 时间和 CSS 文件时间通过缓冲一次来减少,并通过从已经创建的读取来重用。
然而,即使在 SwingUtilities.invokeLater 中的代码已执行之后,也不会在单击鼠标之前部署面板。
如何让 Java Fx 像普通面板一样工作而无需等待用户点击。
注意:我不想使用另一个 JFrame 和 JDialog 弹出窗口来显示 JFxPanel。
java - 忽略事件调度线程如何让这个程序工作?
今天早些时候我试图看看我是否可以回答这个问题。我意识到我并不完全理解Event Dispatch Thread
(EDT)。谷歌搜索既证实了这一点,又对此有所帮助,并澄清了我为什么不这样做。(这也可能与理解有关。)
该代码设置了一个 GUI,然后(如前面的问题)更新一个文本字段,直到取消设置一个标志。
我有几个问题/要求。
请解释为什么如果两个调用(to
swingInit
和doIt
)都在invokeLater
块之外(如图所示),下面的代码运行良好,因为这两个调用都会影响或查询 GUI,但都没有在 EDT 上执行(是吗?)。这不是招致失败吗?如果调用
swingInit
是 inside 和doIt
outside ,代码也会运行invokeLater
。所以swingInit
在 EDT 上执行,但不应该在doIt
EDT 上执行不是问题吗?(我很惊讶这行得通。我应该是吗?)我想我明白为什么如果
doIt
在里面invokeLater
不管它在哪里都会挂起swingInit
:目的invokeLater
只是初始化GUI(对吗?)。应该
doIt
只在 EDT 上启动(可能从发生的事件开始),但肯定不能在invokeLater
块内启动?
(EDT 概念的历史很有趣。并非总是如此。请参阅上面的“为什么我不理解它”的链接。)
java - 等待组件的 isDisplyable
测试游戏时,我有时会在组件不可显示时抛出异常。我在 isDisplayable() 上添加了一个等待循环。
似乎我的游戏可能需要几百毫秒。变得可显示。
这是处理这个问题的明智方法吗?
我正在测试通过套接字与服务器通信的游戏客户端。
谢谢
编辑1:感谢您的评论。我发现在 gui 完成其构造和初始化之前,我正在将 gui(观察者)的中介添加到模型(可观察者)中。情况变得更糟,因为我正在初始化一个调用 createImage 的面板,它返回 null 并抛出。