OpenCV将某个方法添加进JButton.ActionListener()中无法正常使用?

createImagePane()方法是创建一个窗口显示一幅图像,等待sec秒后自动关闭或者按Enter关闭,正常效果如下所示:
图片说明

现在是把这个方法放进了JButton组件的addActionListener()中,想法是点击然后出现上面的内容,但是却出现了下图这种情况:
图片说明

而且点击窗口的关闭按钮也没有反应。
如果将此方法放进Timer中没有问题,直接在其他类中调用也没有反应,就是在JButton中出现了问题。

createImagePane()方法如下:

public class ConfirmPane extends JFrame {
    public static void createImagePane(int sec, String[] imgPath) {
        new ConfirmPane().showImageResult(sec, imgPath);
    }
    showImageResult(int seconds, String[] path) {
        // 省略实现代码
        setSize(1280, 720);
        setTitle("出错警示");
        setResizable(false);
        setLayout(null);
        centerWindow(this);
        Image logo = Toolkit.getDefaultToolkit().getImage(resFolderPath + "image\\logo.png");
        setIconImage(logo);
        JButton confirm = new JButton("确认");
        ImageGui imageGui = new ImageGui(result, null);
        imageGui.setBounds(0, 0, 1280, 720);

        confirm.setBounds(1180, 600, 80, 40);
        confirm.setVisible(true);

        add(imageGui);
        add(confirm);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        confirm.addActionListener(evt -> {
            keyCode = 0;
            dispose();
        });
        confirm.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
                keyCode = e.getKeyCode();
            }

            @Override
            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == 10 && keyCode == 10) {
                    dispose();
                } else {
                    dispose();
                }
            }
        });
        setVisible(true);
        while (keyCode == -1 && i < seconds) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            i++;
        }
        dispose();

    }
}

调用代码如下:

public class Test extends JFrame {

    public Test() {
        String[] path = {"over~D:/Images/0902/20190831175455-3-Miss.jpg", "right~D:/Images/0902/20190831175455-3-Miss.jpg",
                "over~D:/Images/0902/20190831175455-3-Miss.jpg", "right~D:/Images/0902/20190831175455-3-Miss.jpg"};
        setSize(300, 300);
        JButton jButton = new JButton("显示");
        jButton.addActionListener(e -> createImagePane(10, path));
        add(jButton);
        setVisible(true);
    }

    public static void main(String[] args) {
        System.load(System.getProperty("user.dir") + "\\lib\\opencv_java320.dll");
        new Test();
    }
}

注:ImageGui是其他人写的类,功能是显示一幅图像窗体

2个回答

问题好像是因为while循环导致的,但是不清楚具体原因

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问