问题标签 [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 - 为什么使用 invokeLater 很重要?
我最近发现了一个示例代码:
该createAndShowGUI()
方法打开用户界面窗口。然后我尝试将代码修剪如下:
两个版本都同样好用。有什么不同?
java - 为什么不能自主使用invokeLater方法(使用import javax.swing.SwingUtilities)?
以下代码执行良好:
我很好奇为什么以下代码无法编译:
javax.swing.SwingUtilities.invokeLater(r);
和有什么区别import javax.swing.SwingUtilities; invokeLater(r);
java - SwingUtilities.invokeLater 和 SwingWorker 之间的区别?
有什么区别:
和:
哪种方法更好用?
java - Java运行其他类的main方法,当JButton被按下时
我正在尝试开发一个 JFrame,它有两个按钮,可以让我调用其他类的主要方法。第一次尝试是直接把它放在每个按钮的actionPerformed中,这会导致另一个类的JFrame打开但只显示它的标题而不显示JPanel的任何内容另外冻结程序(甚至不能按关闭按钮,必须进入任务管理器或 Eclipse 才能杀死它)。第二次尝试是在 actionPerformed 中添加一个方法调用,这次添加该方法将调用其他类的 main 方法,但结果相同(程序冻结)。
出于测试目的,我直接在这个类的主方法中调用了其他类的 main 方法,这向我证明了其他类的框架已经成功出现,包括它的所有 JPanel 内容、功能等。
我知道我可以在我的 main 方法中创建某种无限循环来等到布尔值设置为 true,但是我认为必须有一些更便宜的方法来让它工作。所以在这里我向你们提出这个问题。
这是第二次尝试的代码;
java - 物质 L&F 不起作用
我想在我的 Java 应用程序中使用Substance L&F 库,所以我下载了 .jar 文件并将它们添加到项目类路径中。然后我想在应用程序的main()
函数中设置 L&F,如下所示:
这是在创建 JFrame 之前完成的。然而,即使没有抛出异常,也没有任何反应,GUI 以默认的 Swing L&F 呈现。
有什么想法我在这里想念的吗?
编辑
而不是SubstanceLookAndFeel.setSkin(skin);
我尝试的电话UIManager.setLookAndFeel(skin);
。这仍然不起作用,但至少我现在得到一个例外:
org.pushingpixels.substance.api.UiThreadingViolationException:
必须在事件调度线程上进行状态跟踪
这不是通过调用这个来解决的invokeAndWait()
吗?
EDIT-2
好的,所以问题有所不同。异常是在创建时抛出的JTable
,而不是在设置 L&F 时。我能够通过调用JFrame
构造函数(然后基本上运行整个应用程序)通过EventQueue.invokeLater()
. 但我以前从未这样做过,这样做是否“保存”(在 Java 术语中有效)?
java - 如何检查调用者是否完成
在下面的代码中,我想在 invokeLater 完成后做一些事情。1)由于调度程序调用了setModel,我无法使用invokeAndWait。2)我不能改变线程内最终变量的值!那么我该如何等待 involeLater 先完成呢?
polymorphism - 奇怪的多态性需求
我有一个带有 eventOccurred 的类,它在 SwingUtilities.invokeLater 中工作(以便在 EDT 上)。这个类将被扩展。我想强制任何扩展这个类的东西也将他们的 eventOcurred 工作放在 invokeLater 中,并且看不到如何去做。在我的基类中将 final 放在 eventOccurred 上是行不通的,因为我需要允许 eventOccurred 被覆盖。
java - 我无法立即更改两个进度条
我想立即更改两个progressBar。但我不能。
我要说的是..
该代码大约需要 2 秒或更长时间。
但我能看到的只是 ProgressBar 的一闪。
所以我搜索了很多信息。
我使用了线程、swingworker、swingutilities(invokelater)
但我无法解决。
我该如何解决这个问题。请帮我。
java - 如果我不使用 SwingUtilities.invokeLater 怎么办?
当我启动我的 GUI 界面时,如果我不使用 invokeLater 会发生什么?
- 这是否意味着所有其余的 GUI 绘画/更新/等。会在主线程中吗?
- 调用
repaint
外部的 ainvokeLater
会使所有后续调用都落入主线程吗?
基本上是这样的:
------------- VS -------------
注意:在小 GUI 的情况下,如果我不放invokeLater
它似乎可以正常工作。事实上,尽管main
执行了最后一行,但应用程序并没有终止。
我已经阅读了很多关于为什么我们应该使用它的文章,这些文章与 Swing 不是线程安全的(它是单线程的等等)有关,但我真的没有读过不调用的后果invokeLater
(部分是因为我的线程知识有限)
java - SwingUtilities.invokeLater(runnable) 和 Swing Timer 是如何工作的?
研究案例: 我在 Swing 中有一个包含一些模型类和一些 GUI 类的程序,我在这两个类中都使用了几个线程,它们运行一个无限循环,每个可运行对象具有不同的睡眠间隔。两个模型线程运行一项非常关键的工作,如果延迟从 40 毫秒上升到 60 毫秒,将无法正常工作,因此它们非常关键。
但是我在 GUI 中有数百个组件必须在不到一秒或更频繁的时间内更新。这些组件无法使用观察者设计模式进行更新,因为它们不仅仅反映模型中的更改。他们应该计算诸如剩余时间之类的东西。
问题
- 我认为使用
Runnable
调用的数百个 sSwingUtilities.invokeLater(runnable)
来更新所有 GUI 组件效率不高。因为上下文切换会产生巨大的副作用。所以我要避免它。我真的应该避免创建所有这些可运行对象,invokeLater()
还是swing timer
不将它们作为线程运行并且即使其中所有这些都具有优化方法Thread.sleep(500)
? - 为了解决上述问题,我决定创建一个带有更新方法的接口 SwingUpdatable。并创建一个每 500 毫秒运行一次的 SingleTonSwingUpdater,并运行向其注册的类的所有更新方法。观察者设计模式让我想到了这个想法。但我担心这将是一种反模式。而且我不确定它是否会降低程序的灵活性。
- 如果我使用摇摆定时器怎么办。它肯定无法理解,如果 TimerTasks 都应该在 500 毫秒的时间间隔内运行,那么就不应该为它们创建一个新线程,并且在可运行对象上执行一个循环并一个接一个地执行它们就足够了。
- Java 是否有针对此问题的内置解决方案,或者是否有我可以使用的设计模式,或者我应该依赖最初看起来很脏的解决方案?