Tag: event dispatch thread

使用JavaFX Platform.runLater并从不同的线程访问UI

我有一些关于Platform.runLater问题。 我有一个JavaFX Application类。 在这个类中,我运行一个线程(该线程从网络套接字读取数据)。 现在当我在线程中创建一个新的Stage ,系统会抛出一个execption(JavaFX事件调度程序线程和我的netork-read线程不一样) – 我理解这种行为。 但另一方面是,我将文本从网络阅读器附加到现有的TextArea或添加/删除ListView中的一些项目 – 这不会引发exception – 为什么? 我认为JavaFX是单线程的(ui库部分)。 这与Swing中的相同:有时它有效,有时你只有垃圾(因为EDT)? 我的问题: JavaFX事件调度程序线程何时抛出exception,何时抛出exception? 有关于此的任何好文件吗? 是否有更简单(更简洁和更清晰)的方式将Platform.runLater与run()方法一起使用? 结合try catch(或多次捕获),它看起来很奇怪 我知道在一个线程中使用Platform.runLater并不是那么好(设计解决方案)

执行JavaMail时,所有JFrame都会冻结

我开发汽车管理系统的程序。 然后,当汽车进来和开车时,我想发送邮件给这家公司的老板。 我的代码可以成功发送邮件,但我注意到,在邮件发送完成之前,当邮件发送时,其他JFrame窗口被冻结(我无法在所有JFrame窗口上执行任何操作)。 这通常适用于Javamail还是有办法使其他JFrame仍然有效? 在我的程序中,完成发送一封邮件大约需要10秒钟。

防止在后台任务期间锁定Swing GUI

我有一个swing应用程序,它存储一个对象列表。 当用户点击按钮时 我想对列表中的每个对象执行两个操作,然后在完成后,将结果绘制在JPanel中。 我一直在尝试使用SwingWorker,Callable和Runnable进行处理,但无论我做什么,在处理列表时(可能需要几分钟,因为它是IO绑定的),GUI被锁定。 我有一种感觉,这可能是我调用线程或其他东西的方式,还是可能与图形函数有关? 这不是线程,因为它非常快。 我必须按顺序完成两个处理阶段,那么确保第二个阶段在第一个阶段等待的最佳方法是什么? 我已经使用了join(),然后 while(x.isAlive()) { Thread.sleep(1000); } 试图确保这一点,但我担心这也可能是我的问题的原因。 我一直在寻找一些指针,但由于我找不到任何东西,我确信我在这里做了些蠢事。

为什么JCheckBox上的setSelected失效?

有人可以向我解释当我将JOptionPane放入ItemListener时,为什么我丢失了JCheckBox的选择(由setSelected()设置setSelected() ? 这是一个错误吗? 奇怪的是,如果使用invokeLater()延迟此过程, setSelected()将按预期正常工作。 来自SSCCE import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ComponentEventDemo extends JPanel implements ComponentListener, ItemListener { private static final long serialVersionUID = 1L; private JFrame frame; private JTextArea display; private String newline = “\n”; private JTextField field1; public ComponentEventDemo() { super(new BorderLayout()); display = new JTextArea(10, 25); display.setEditable(false); JPanel panel […]

Swing – 更新标签

我有一个消息标签和一个提交按钮。 将多次按下提交按钮,每次按下的操作最多可能需要一分钟。 按下按钮时,我想将消息设置为空,在任务完成后,我想将消息设置为“完成”。 private void submitActionPerformed(java.awt.event.ActionEvent evt) { message = “”; updateMessageLabel(); doTheTask(); /* this update is apply to the label after completion */ message = “Complete”; } 是否可以在运行submitActionPerformed()方法之前(或在方法中)更新该消息标签,但是在单击该按钮之后?