Tag: event dispatch thread

SwingUtilities.invokeLater是做什么的?

SwingUtilities.invokeLater做什么的? 它只是延迟其run方法内的代码块的run ? 在invokeLater函数中调用一个动作或者在我们想要执行的线程的末尾调用它,有什么区别? 任何人都可以帮助我真正的invokeLater函数吗?

用长时间运行的任务结果反复更新JLabel

我正在编写一个不断ping服务器的程序。 我写了代码来检查一次,然后把这个ping放在一个JLabel并把它放在一个名为setPing()的方法中。 这是我的代码 private void formWindowOpened(java.awt.event.WindowEvent evt) { setPing(); } 这工作,但只做了一次,所以我做了: private void formWindowOpened(java.awt.event.WindowEvent evt) { for(;;){ setPing(); } } 但这并不是第一次。 我没有把setPing方法,因为它太长,所以这里是: public String setPing(){ Runtime runtime = Runtime.getRuntime(); try{ Process process = runtime.exec("ping lol.garena.com"); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) […]

Java事件分派线程说明

我最近开始学习和探索Java中GUI编程的基础知识。 经过编程一段时间,我只做了后端工作或工作,因此离用户界面最近的是命令控制台(我知道令人尴尬)。 我正在使用Swing,并且据我所知,这也意味着我也使用了AWT。 我的问题是基于这段代码: java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new frame.setVisible(true); } } ); 我一直在研究这一段时间,因为我想完全理解这段奇怪的代码,并多次遇到“事件分派线程”这个术语。 纠正我,如果我错了,但据我了解; 它与使用多个线程以及Java Swing如何解释这些线程有关。 我也收集以上代码用于确保所有线程在创建窗口之前是“安全的”,因此invokeLater? 我读过: “你只能调用在Event-Dispatching Thread上的框架上运行的方法” 只有在某些情况下,你才可以调用主方法在框架上运行的方法。 有人可以向我澄清事件调度线程究竟是什么? 它如何与多个执行线程相关联以及如何从主方法调用这些线程是不安全的? 另外为什么我们需要这个invokeLater? 我们能不能像其他物体一样创建窗户? 我在研究中遇到了一些障碍,因为我没有把握这些关系和想法。 值得一提的是,我喜欢将自己的知识建立在深入理解的基础上,因为我相信这会带来最好的总体结果,从而形成最好的计划。 如果我深入了解事情是如何工作的,那么你可以有效地使用这些提示和调整,而不是仅仅把它们再撇在代码中,所以请不要害怕给我一些额外的深入解释和拓宽我的知识。 谢谢。

SwingUtilities.invokeLater

我的问题是关于SwingUtilities.invokeLater 。 我应该什么时候使用它? 每次我需要更新GUI组件时,是否必须使用? 它究竟做了什么? 有没有其他的选择,因为它听起来不直观,并增加了看似不必要的代码?