- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是简化的代码,可以通过按主 JFrame 类中的按钮来调用该代码。使用此代码,然后关闭生成的对话框之一,会导致 Java session 中的所有 Activity 窗口锁定或消失。
//Broken code
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
List<JFrame> frameList = new ArrayList<>();
frameList.add(new TestJFrame());
frameList.add(new TestJFrame());
frameList.forEach(frame -> frame.setVisible(true));
frameList.forEach(frame -> {
SwingUtilities.invokeLater(() -> {
JOptionPane.showMessageDialog(frame, "Msg", "Title", 0);
frame.setVisible(false);
frame.dispose();
});
});
}
但是,如果我要删除 SwingUtilities.invokeLater()
部分,那么它会像我预期的那样工作(弹出对话框,关闭对话框,窗口消失,重复)。
//Working code
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
List<JFrame> frameList = new ArrayList<>();
frameList.add(new TestJFrame());
frameList.add(new TestJFrame());
frameList.forEach(frame -> frame.setVisible(true));
frameList.forEach(frame -> {
//SwingUtilities.invokeLater(() -> {
JOptionPane.showMessageDialog(frame, "Msg", "Title", 0);
frame.setVisible(false);
frame.dispose();
//});
});
}
我不想使用第二个,因为实际的代码是在通知一组监听器的后台线程中启动的,所以如果我要使用第二个,那么它会阻塞线程并减慢监听器的速度,直到用户响应(当我可以在那段时间进行处理时)。 invokeLater()
让我崩溃了怎么办?这是预期的行为吗?
注意:这是从我实际使用它的方式中提取出来的简化代码,但核心问题仍然存在(我有多个 JFrame
,如果将多个 JOptionPane.showMessageDialog()
放在不同 JFrame
的 invokeLater()
上,那么它会让我崩溃。我使用在 Netbeans 中创建的新的、独立的 JFrame
类测试了上面的代码,并且能够重现错误。
编辑:我似乎无法在 Windows 中重现该错误,似乎只在 Linux 中发生。
最佳答案
很可能是 invokeLater() 破坏了您的代码。如果您想线程化此操作,请尝试使用简单的线程或
EventQueue.invokeLater(new Runnable()
{
public void run()
{ //Your joptionpane here
}
});`
关于java - 多个showMessageDialog可以断swing吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550826/
安装并修复我的 VS2015 实例后,我仍然无法让智能感知(服务器端)在我的 MVC View 中工作。当我在 session 中第一次打开 .cshtml 文件并找到 Activitylog 文件时
我是一名优秀的程序员,十分优秀!