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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题