微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在特定时间停止 invokeLater 或创建 JFrame?

如何解决有没有办法在特定时间停止 invokeLater 或创建 JFrame?

我正在做一个小项目,在这个例子中它由 2 个类(和窗口)组成。基本上,当我单击放置在 JFrame 1 上的按钮时,它会打开一个 jdialog,然后启动处理函数,该函数执行时间很长(在示例中,我只放置了千位哈希)。然后,当处理完成时,我想关闭 jdialog(或者如果不可能,我希望程序打开一个新的 JFrame 或 jdialog,但只有在处理完成时)。有没有办法实现其中一个目标?

这是我的主类,其中包含 JFrame :

public class test2 {

    private static JFrame frame;    
    
    public static void main(String[] args) {
        SwingUtilities.invokelater(new Runnable() {
            public void run() {
                try {
                    frame = new JFrame("jdialog Test");
                    frame.setSize(650,550);
                    frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(createMainPanel());
                    frame.setLocationByPlatform(true);
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printstacktrace();
                }
            }
        });
    }   
        
    private static JPanel createMainPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(150,100,150,100));
        panel.setPreferredSize(new Dimension(400,400));
        
        JButton button = new JButton("Open jdialog");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                SwingUtilities.invokelater(new Dialog());
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Treatment();                        
                    }
                }).start();
            }
        });
        
        panel.add(button);
        return panel;
    }
    
    
    public static void Treatment() {
        String str = "a";
        for(int i = 0; i < 4000000; i++) {
            Thread.yield();
            MessageDigest md = null;
            try {
                md = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e1) {
                e1.printstacktrace();
            }
            md.update(str.getBytes());
            byte[] digest = md.digest();
            String myHash = DatatypeConverter.printHexBinary(digest).toupperCase();
            if (i % 400000 == 0) {
                System.out.println("Processing " + i / 400000 + "0 %");
            }
        }
        System.out.println("Processing 100 %");
    }

这是我的第二个类,其中包含 Runnable jdialog :

public class Dialog implements Runnable {

    private jdialog dialog;
    
    public Dialog() {
        this.dialog = new jdialog();    
    }

    @Override
    public void run() {
        this.dialog.setDefaultCloSEOperation(jdialog.disPOSE_ON_CLOSE);
        this.dialog.setTitle("Veuillez patienter");
        this.dialog.setSize(300,200);
        this.dialog.setLocationRelativeto(null);
        this.dialog.setVisible(true);
    }
}

希望我解释清楚,谢谢大家!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。