Aengus Sun 2019-09-13 22:05 采纳率: 0%
浏览 161

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条回答 默认 最新

  • zqbnqsdsmd 2019-09-14 21:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突