Java JProgressBar在long方法期间

Java JProgressBar在long方法期间,java,multithreading,swing,progress,event-dispatch-thread,Java,Multithreading,Swing,Progress,Event Dispatch Thread,我在侦听器上有一个长方法,我想用JProgressBar类显示一个进度条 btnEsegui.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { crypt(); } }); 我想知道是否正确,在哪里放置线程 SwingUtilities.invokeLa

我在侦听器上有一个长方法,我想用JProgressBar类显示一个进度条

btnEsegui.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {             

            crypt();
        }
    }); 
我想知道是否正确,在哪里放置线程

SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    // PROGRESS BAR
                    framePBar = new JFrame("");
                    framePBar.setBounds(
                            MainConstants.infoWindowPos_X, MainConstants.infoWindowPos_Y, 
                            MainConstants.infoWindowDim_X, MainConstants.infoWindowDim_Y);

                    pBarPanel = new JPanel();
                    pbar = new JProgressBar();
                    pbar.setMinimum(0);
                    pbar.setMaximum(100);
                    pbar.setIndeterminate(true);
                    pBarPanel.add(pbar);
                    framePBar.getContentPane().add(pBarPanel);
                    framePBar.setVisible(false);
                }
            });

您可能希望事件侦听器启动一个运行
crypt
的新线程。听起来你有一个耗时的任务-
crypt()
方法调用-当你显示一个不确定的进度条时,它应该在后台线程中运行,因此
SwingWorker
可能是最好的方法。1)为了更快地获得更好的帮助,发布一个(最小的完整可验证示例)或(简短、自包含、正确的示例)。2) 另请参见,不清楚代码是否使用了多个帧,但显示的帧仅包含进度条这一事实是一个警告标志。。