相关疑难解决方法(0)

其他线程中的繁忙循环延迟了EDT处理

我有一个Java程序,它在一个单独的(非EDT)线程上执行紧密循环.虽然我认为Swing UI仍然应该响应,但事实并非如此.下面的示例程序显示了问题:单击"试用我"按钮应该在大约一半时间后弹出一个对话框,并且应该可以通过单击其任何响应立即关闭该对话框.相反,对话框需要更长的时间才能显示,并且/或者在单击其中一个按钮后需要很长时间才能关闭.

  • Linux(两台具有不同发行版的不同计算机),在Windows上,在Raspberry Pi(仅限服务器VM)和Mac OS X上(由另一个SO用户报告)出现问题.
  • Java版本1.8.0_65和1.8.0_72(两者都试过)
  • i7处理器有很多核心.EDT应该有足够的备用处理能力.

有没有人知道为什么EDT处理被延迟,即使只有一个繁忙的线程?

(请注意,尽管Thread.sleep呼叫的各种建议是导致问题的原因,但事实并非如此.它可以被移除,问题仍然可以重现,尽管它表现得稍微不那么频繁并且通常表现出上述第二种行为 - 即非- 响应JOptionPane对话而不是延迟对话框出现.此外,没有理由睡眠调用应该屈服于另一个线程,因为如上所述的备用处理器核心 ; EDT可以在调用后继续在另一个核心上运行sleep).

import java.awt.EventQueue;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class MFrame extends JFrame
{
    public static void main(String[] args)
    {
        EventQueue.invokeLater(() -> {
            new MFrame();
        });
    }

    public MFrame()
    {
        JButton tryme = new JButton("Try me!");

        tryme.addActionListener((e) -> {
            Thread t = new Thread(() -> {
                int a = 4;
                for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading

9
推荐指数
1
解决办法
947
查看次数

如何在GUI中出现另一个JOptionPane时解除一个JOptionPane

正如你从我上面的主题中看到的
那样,我想知道如何解雇由于另一个JOptionPane而变得无关紧要的JOptionPane,并且由于某些原因,用户没有通过单击ok按钮解除第一个问题(对于例).

我在其他网站上看到过一些类似问题的软件,人们建议简单地做:

JOptionPane.getRootFrame().dispose();  
Run Code Online (Sandbox Code Playgroud)

但是我如何为每个JOptionPane存储一个引用,并且只能解雇那个想要的引用.
谢谢

编辑:
代码示例:

package Gui;

import javax.swing.JOptionPane;
import java.awt.*;

/**
 *
 * @author 
 */
public class JpanelMainView extends javax.swing.JPanel {

    /** Creates new form JpanelMainView */
    public JpanelMainView() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() …
Run Code Online (Sandbox Code Playgroud)

java swing joptionpane

5
推荐指数
1
解决办法
8032
查看次数

标签 统计

java ×2

swing ×2

joptionpane ×1

multithreading ×1