问题标签 [event-dispatch-thread]
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 - 有没有办法以不锁定摆动线程的方式调用 JXTable.packAll() ?
我正在显示JXTable
来自SwingX项目的大量数据。加载数据后,我packAll()
在表上调用,但有 20000 列和 30,000 条记录可能需要 5 秒或更长时间。我从 swing 线程中调用它,这意味着 UI 被锁定了 5 秒。我尝试调用packAll
后台线程,正如我所怀疑的那样,这样做会产生奇怪的副作用。调用后packAll()
,当我将鼠标悬停在表格上时,表格中的所有数字似乎都在不断更新为不同的数字。在打包如此大表的列时,有什么方法可以让我在 JXTable 中获得合理的用户体验。
java - JOptionPane.showMessageDialog 和 swing.utils.invokeAndWait 的(事件调度)线程安全用法是什么?
我有一个简单的 groovy 脚本,从它的主线程执行需要向用户显示一些对话框。
我的挥杆知识有限且生疏,但我记得读过有关需要小心地将 GUI 内容保留在事件调度线程 (EDT) 上的信息。
如果我只是从我的主线程调用静态JOptionPane.showMessageDialog
方法,我是否正确地假设这会违反将 GUI 内容保存在 EDT 上的正确做法?
我真的应该使用 swing.utils.invokeAndWait 方法,例如下面的示例代码吗?
现在,在 invokeAndWait 完成后,除了消息对话框之外,上面的内容没有做任何事情来使值可用。
据推测,groovy 'closures' 实现 Runnable 将使代码比上面更简单。
是否需要 invokeAndWait?如果是这样,有人请举一个正确实现的例子来获得类似使用groovy的confirmDialog之类的结果吗?
java - 如何在 Swing 中分析 EDT?
我有一个正在 Swing 中构建的应用程序。它有一个可滚动和可缩放的图表组件,我可以平移和放大。整个过程都很流畅,只是有时 UI 会暂停大约 750 毫秒,我不知道为什么。这并不总是发生 - 但有时应用程序中会发生一些事情,它每 6-8 秒开始像这样暂停一次。
似乎很清楚,在 EDT 上放置了一些需要 750 毫秒左右才能运行的事件,这不应该发生。
我如何像这样专门分析 EDT?我真正想做的是每次事件在 EDT 上运行时都会输出到日志或 System.out 以及事件所花费的总时间。有没有办法做到这一点?
或者是否有一些工具可以为我执行此操作并给我记录在 EDT 上运行的所有内容以及需要多长时间?
我想通过这个日志,查看所有需要很长时间的内容,然后找到问题所在。
java - 如何查看在事件线程上运行的所有内容
我们遇到了一个我们无法追踪的错误,我们无法追踪某些东西冻结了我们的 Swing 线程(现在已经快 2 周了,还没有真正的结果)——我们是经验丰富的 Swing 程序员,但我们有一个庞大的程序,并且相信它存在于一些遗留代码
我想知道,除了EventQueue
在 JDK 中编辑实际类之外,还有什么方法可以让我们查看当前在 Event Dispatch Thread 上运行的所有代码片段——也许是某种工具可以让我们查看它们进入或离开事件派发线程?
java - 隐藏按钮,然后等待 2 秒再显示,点击按钮后
我有我正在制作的这个学校项目,我需要让我的代码隐藏一个按钮,然后睡觉,然后继续,但它从不隐藏按钮。
我有一个由按下按钮启动的类,然后它启动另一个应该隐藏按钮的方法,然后它在另一个类中启动一个方法,该方法做了很多完美的事情,然后它启动了第三种方法在第三节课上,它应该做的第一件事就是睡觉,但它在隐藏我的按钮之前就睡觉了,并且完全跳过了隐藏我的按钮。
这是代码部分(不要介意丹麦值/方法名称):
我知道这部分被 if.. 包围,但它确实像这样被调用。
然后在“computertur”方法的开始
我确实读过关于invokeAndWait
EDT:s 应该更好的命令,但是我怎样才能使用它来暂停mythread
......甚至,一个更好的问题,为什么它不隐藏按钮?:) 我的意思是,在我的脑海中,setVisible(false)
在其他任何事情之前调用它会在它做其他任何事情之前隐藏它。为什么不呢?
java - Java 事件队列。为什么一切都应该在invokelater方法中?
在我正在阅读的书中,每个带有多线程的 GUI 示例都有这样的内容:
(我的意思是事件队列)。但是代码不是在主(EDT)线程中自动执行的吗?
java - 如何在 Event dispatch 线程中同时运行两个组件?
我有一个 JButton,当我单击它时,我从数据库加载一些数据 + 初始化一个具有许多控件的 JDialog + 用加载的数据填充这些控件,然后显示缓慢的 JDialog。这需要大约 3 到 5 秒才能最终显示 JDialog,这会导致程序以一种糟糕的方式冻结。
我创建了一个带有来自 SwingX 的 JXBusyLabel 的小型 JDialog,以在加载和初始化如此缓慢的进程时显示繁忙的标签。但是如何在初始化慢速对话框时在 EDT 中运行这个繁忙的标签 JDialog 呢?
注意:从 db 加载数据并不慢,但初始化繁重的 JDialog 及其组件会导致处理缓慢。
java - 在Java中,每次事件调度线程从处理输入事件返回时,我可以调用一个例程吗?
我正在开发一个 GUI,当下面的事情发生变化时,我有一个例程来更新显示:
我试图避免“过于频繁地”调用 update() ——即,如果连续设置了许多属性,我宁愿只调用一次 update()。
是否可以在每个用户输入事件之后调用 update() - 键/鼠标/等?我可以手动执行此操作,但我有很多事件处理程序,我知道我会忘记——Java 可以为我执行此操作吗?
java - Sun 的演示在 EDT 之外做 GUI 工作?
我正在查看SplashDemo.java
Java Sun 教程。该类说明了如何在应用程序启动时创建启动画面。SplashDemo 直接在 main 方法中创建一个框架。在这个例子中,为什么不运行在事件调度线程上运行的 GUI 代码是可以的invokeLater
?
这是完整的来源:
java - 在多线程环境中重绘
我正在开发一个带有大约十个不同数据源(例如统计/错误日志/...)的小程序。每个数据源由单个网络连接更新,并通过观察者机制报告更新。小程序具有显示部分数据的不同视图。每个视图只对数据的某些部分感兴趣,并在必要的 Observables 上将自己注册为观察者。
视图(扩展 JPanel)主要由标准摆动组件(例如 JLabels、JButton、...)组成。视图中组件的某些属性取决于来自底层数据模型的信息。
例子:
此逻辑在paintComponent()
StatisticPanel 的方法中实现,并且这些update()
方法只调用 repaint(),因为我不希望在 EDT 之外操作组件。
这是在多线程环境中更新摆动组件的预期方式吗?使用 Runnable 会更好SwingUtitlies.invokeLater()
吗?有没有更好的方法来解决这个问题?