从SwingWorker更新JProgressBar

如何解决从SwingWorker更新JProgressBar

我是Java的新手,正在尝试构建一个从JSwing TextField接收6个输入的应用程序。 我有大约5个复选框。根据选择,一些详细信息将从数据库获取。 所有其他东西现在都在工作,但是我想放置一个进度条,该进度条会根据进度更新值。我尝试跨复选框手动将带有progressBar.setValue(0)的ProgressBars更新为progressBar.setValue(100)。但是它没有更新。在在线浏览了一些文章之后,我发现此链接中使用了swing worker。我尝试了罗宾的解决方案。 How do I make my SwingWorker example work properly?。它会创建一个单独的对话框,但是它是空的。

Showing Progress like this

是否可以在程序中设置进度条更新?

        jButton1 = new javax.swing.JButton();
        jButton1.addActionListener(new ActionListener() {
            @Override
            
            public void actionPerformed(ActionEvent e) {
            
                    progressBar.setValue(0);


                 if(Sizing_details.isSelected()) {
                        
                         progressBar.setValue(20); 
                        
                         
                    }

然后我尝试通过我提到的链接使用swing worker。

                    public void actionPerformed(ActionEvent e) {
            
                    new GuiWorker().execute();

对话框被弹出,没有任何显示。但是从功能角度来看,它是可行的。您能帮我解决这个问题吗?

我有两个问题。

  1. 每当我在“提交”按钮操作下的复选框中设置进度条时,是否可以手动更新它们。 ?
  2. 如果我必须使用swing worker,是否可以在同一帧中添加进度条并对其进行操作。

编辑我:

我可以弹出进度栏。但是,当我从下面的链接调用“ go”方法SwingWorker ProgressBar

在我的Jbutton动作事件中,它显示一个空白屏幕。

但是当我在run方法调用相同的方法时,效果很好。

            java.awt.EventQueue.invokelater(new Runnable() {
            public void run() { go();
                try {
                    new JFrame_Demo().setVisible(true);
                    jButton1.addActionListener(new ActionListener() {
                        
                        public void actionPerformed(ActionEvent e) {
                            
                            
                        
                                

上面的代码有效。它会初始化进度条。

              java.awt.EventQueue.invokelater(new Runnable() {
            public void run() { 
                try {
                    new JFrame_Demo().setVisible(true);
                    jButton1.addActionListener(new ActionListener() {
                        
                        public void actionPerformed(ActionEvent e) {
                            
                            go();
                        
                                

上面的代码显示空白屏幕。

    import java.awt.Color;
import java.awt.Dialog;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.sqlException;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.AbstractAction;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent;
import javax.swing.event.changelistener;

import org.apache.poi.hssf.usermodel.hssfWorkbook;

import com.ibm.java.diagnostics.utils.plugins.Container;
import com.ibm.jvm.trace.format.api.Component;
import com.sun.tools.javac.util.List;

import javax.swing.JToolBar;
import javax.swing.JComboBox;
import javax.swing.jdialog;
import javax.swing.JFrame;
import javax.swing.JCheckBox;
import dbutility.*;

    public class JFrame_Demo extends javax.swing.JFrame {
        
        
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        /**
         * Creates new form JFrame_Demo
         * @throws IOException 
         * @throws FontFormatException 
         * @throws InterruptedException 
         */
        
        public JFrame_Demo() throws FontFormatException,IOException,InterruptedException {
            
            
            setTitle("Database Statistics Execution");
            initComponents();
            getContentPane().setBackground(Color.WHITE);
            setBackground(Color.white);
            setResizable(false);
            setSize(800,800);
            
           pack();
            setVisible(true);
         
        }
        
        
        
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         * @throws IOException 
         * @throws FontFormatException 
         * @throws InterruptedException 
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
        private void initComponents() throws FontFormatException,InterruptedException {
            Font customFont = Font.createFont(Font.TRUETYPE_FONT,new File("lib\\Font\\3ds_Regular.otf")).deriveFont(12f);
         
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            ge.registerFont(customFont);
            
            DBUser_Input = new javax.swing.JLabel();
           
            DBUser_Input.setFont(customFont);
            
            DBUser_Input.setToolTipText("Database System User");
            Schema = new javax.swing.JTextField();
            space_user_lable = new javax.swing.JLabel();
            space_user_lable.setFont(customFont);
            jLabel4 = new javax.swing.JLabel();
            jLabel4.setFont(customFont);
            jLabel5 = new javax.swing.JLabel();
            jLabel5.setFont(customFont);
            Username = new javax.swing.JTextField();
            Instance = new javax.swing.JTextField();
            syspassword = new javax.swing.jpasswordfield();
            schema_password = new javax.swing.jpasswordfield();
            jButton1 = new javax.swing.JButton();
            JProgressBar pb = new JProgressBar();
            getContentPane().add(pb);
            jButton1.addActionListener(new ActionListener() {
                @Override
                
                
                public void actionPerformed(ActionEvent e ) {
                    new GuiWorker().execute();
                
                    String schema = Schema.getText();
                    String Schema_Password = schema_password.getText();
                    String port = Port.getText();
                    String instance = Instance.getText();
                    String Host = host.getText();
                    String URL = "jdbc:oracle:thin:@"+Host+":"+port+":"+instance;
                    String dbpassword = syspassword.getText();
                    String username = Username.getText();
                    
                    
                    try {
                        Class.forName("oracle.jdbc.OracleDriver");
                        Connection con = DriverManager.getConnection(URL,username,dbpassword);
                    if(Exp_Schema_Check.isSelected()) {
                            // PROGRESS BAR TO BE SET TO 20
                            //Execute 20 database queries....
                            
                            
                    }
                        if(DB_Parameters_Sizing_Details.isSelected()) {
                            // PROGRESS BAR TO BE SET TO 50
                             //Execute 12 Database queries
                            
                             
                        }
                        
                        
                    if(Redo_Log.isSelected()) {
                        PROGRESS BAR TO BE SET TO 75
                        //... Execute 35 queries. . 

                    }
                        } catch (ClassNotFoundException e1) {
                            // Todo Auto-generated catch block
                            e1.printstacktrace();
                        } catch (sqlException e1) {
                            // Todo Auto-generated catch block
                            e1.printstacktrace();
                        }
                     
                    System.exit(0);
                        
                        
                    }
                
                
                }
            
                    );
            
                 
            Exp_Schema_Check = new javax.swing.JCheckBox();
            DB_Parameters_Sizing_Details = new javax.swing.JCheckBox();
            DB_Parameters_Sizing_Details.setFont(customFont);
            Redo_Archive_Details = new javax.swing.JCheckBox();
            Redo_Archive_Details.setFont(customFont);
            Session_Details = new javax.swing.JCheckBox();
            Session_Details.setFont(customFont);
            Tablespaces_Details = new javax.swing.JCheckBox();
            Tablespaces_Details.setFont(customFont);
            SPM_Performance_Details = new javax.swing.JCheckBox();
            SPM_Performance_Details.setFont(customFont);
            
            setDefaultCloSEOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

            DBUser_Input.setText("Enter Database System Username");

            Schema.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTextField1ActionPerformed(evt);
                }
            });
            
            space_user_lable.setText("Enter 3dspace Username");

            jLabel4.setText("Enter Instance Name");

            jLabel5.setText("Enter 3dspace Password");

            Username.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTextField2ActionPerformed(evt);
                }
            });

            Instance.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTextField4ActionPerformed(evt);
                }
            });
            
                        
            jButton1.setText("Submit");

            Exp_Schema_Check.setText("Exp_Schema_Check");
            Exp_Schema_Check.setFont(customFont);

            DB_Parameters_Sizing_Details.setText("DB_Parameters_Sizing_Details");

            Redo_Archive_Details.setText("Redo_Archive_Details");

            Session_Details.setText("Session_Details");

            Tablespaces_Details.setText("Tablespaces_Details");

            SPM_Performance_Details.setText("SPM_Performance_Details");
            
            JLabel Hostname = new JLabel();
            Hostname.setFont(customFont);
            Hostname.setText("Enter the Database Hostname");
            
            host = new JTextField();
            
            JLabel lblEnterTheDatabase = new JLabel();
            lblEnterTheDatabase.setFont(customFont);
            lblEnterTheDatabase.setText("Enter the Database Port");
            
            Port = new JTextField();
            
            JLabel syspass_label = new JLabel();
            syspass_label.setFont(customFont);
            syspass_label.setText("Enter Database System Password");
            
            JLabel lblPoweredByDs = new JLabel();
            lblPoweredByDs.setForeground(new Color(51,102,204));
            lblPoweredByDs.setToolTipText("Database System User");
            lblPoweredByDs.setFont(customFont);
            lblPoweredByDs.setFont(customFont);
            
            lblPoweredByDsgs = new JLabel();
            lblPoweredByDsgs.setForeground(new Color(0,153,255));
            lblPoweredByDsgs.setText("Powered By DSGS Infra Team");
            lblPoweredByDsgs.setFont(null);
            
            selectall = new JCheckBox("Select All");
           
           
            selectall.addItemListener(new ItemListener() {

                @Override
                public void itemStateChanged(ItemEvent arg0) {

                    if(selectall.isSelected()) {
                        Exp_Schema_Check.setSelected(true);
                        DB_Parameters_Sizing_Details.setSelected(true);
                        Redo_Archive_Details.setSelected(true);
                        Session_Details.setSelected(true);
                        SPM_Performance_Details.setSelected(true);
                        Tablespaces_Details.setSelected(true);
                        
                    }
                    
                    else if(selectall.isSelected()==false) {
                        Exp_Schema_Check.setSelected(false);
                        DB_Parameters_Sizing_Details.setSelected(false);
                        Redo_Archive_Details.setSelected(false);
                        Session_Details.setSelected(false);
                        SPM_Performance_Details.setSelected(false);
                        Tablespaces_Details.setSelected(false);
                        
                    }
                        
                    
                }
                
            });
            
            progressBar = new JProgressBar();
            progressBar.setStringPainted(true);
            
            
            
                

                
            
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            layout.setHorizontalGroup(
                layout.createParallelGroup(Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                    .addComponent(jLabel4)
                                    .addComponent(space_user_lable)
                                    .addComponent(Hostname)
                                    .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                        .addGroup(layout.createSequentialGroup()
                                            .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                                .addComponent(DBUser_Input)
                                                .addComponent(jLabel5))
                                            .addGap(105)
                                            .addGroup(layout.createParallelGroup(Alignment.TRAILING,false)
                                                .addComponent(Username,Alignment.LEADING,GroupLayout.DEFAULT_SIZE,197,Short.MAX_VALUE)
                                                .addComponent(Schema,172,Short.MAX_VALUE)
                                                .addComponent(schema_password,GroupLayout.PREFERRED_SIZE,Short.MAX_VALUE)
                                                .addComponent(Instance,Short.MAX_VALUE)
                                                .addComponent(host,Short.MAX_VALUE)
                                                .addComponent(syspassword,Alignment.LEADING)
                                                .addComponent(Port,Short.MAX_VALUE)))
                                        .addComponent(lblPoweredByDs,Alignment.TRAILING,149,GroupLayout.PREFERRED_SIZE)))
                                .addContainerGap(1427,Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(syspass_label,1312,Short.MAX_VALUE)
                                .addGap(612))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(30)
                        .addGroup(layout.createParallelGroup(Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(selectall)
                                .addGap(381)
                                .addComponent(progressBar,GroupLayout.PREFERRED_SIZE))
                            .addComponent(Exp_Schema_Check)
                            .addComponent(DB_Parameters_Sizing_Details)
                            .addComponent(Redo_Archive_Details)
                            .addComponent(Session_Details)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                    .addComponent(SPM_Performance_Details)
                                    .addComponent(Tablespaces_Details))
                                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(182)
                                        .addComponent(jButton1))
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(381)
                                        .addComponent(lblPoweredByDsgs,185,GroupLayout.PREFERRED_SIZE)))))
                        .addContainerGap(1161,Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(lblEnterTheDatabase,170,GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(1754,Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(DBUser_Input)
                            .addComponent(Username,GroupLayout.PREFERRED_SIZE))
                        .addGap(48)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(syspass_label,21,GroupLayout.PREFERRED_SIZE)
                            .addComponent(syspassword,GroupLayout.PREFERRED_SIZE))
                        .addGap(58)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(space_user_lable)
                            .addComponent(Schema,GroupLayout.PREFERRED_SIZE))
                        .addGap(45)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(jLabel5)
                            .addComponent(schema_password,GroupLayout.PREFERRED_SIZE))
                        .addGap(44)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(Instance,GroupLayout.PREFERRED_SIZE))
                        .addGap(44)
                        .addGroup(layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(Hostname)
                            .addComponent(host,GroupLayout.PREFERRED_SIZE))
                        .addGap(18)
                        .addGroup(layout.createParallelGroup(Alignment.LEADING)
                            .addComponent(lblEnterTheDatabase)
                            .addComponent(Port,GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(ComponentPlacement.RELATED,75,Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(Alignment.TRAILING)
                            .addComponent(progressBar,GroupLayout.PREFERRED_SIZE)
                            .addComponent(selectall))
                        .addGap(18)
                        .addGroup(layout.createParallelGroup(Alignment.LEADING)
                            .addGroup(Alignment.TRAILING,layout.createSequentialGroup()
                                .addComponent(Exp_Schema_Check)
                                .addGap(18)
                                .addComponent(DB_Parameters_Sizing_Details)
                                .addGap(18)
                                .addComponent(Redo_Archive_Details)
                                .addGap(18)
                                .addComponent(Session_Details)
                                .addGap(18)
                                .addComponent(SPM_Performance_Details)
                                .addGap(18)
                                .addComponent(Tablespaces_Details))
                            .addGroup(Alignment.TRAILING,layout.createSequentialGroup()
                                .addComponent(jButton1)
                                .addPreferredGap(ComponentPlacement.RELATED)
                                .addComponent(lblPoweredByDsgs)))
                        .addGap(49)
                        .addComponent(lblPoweredByDs,20,GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
            );
            getContentPane().setLayout(layout);
            

            pack();
            
            
        }// </editor-fold>//GEN-END:initComponents
        
    
        private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FirsT:event_jTextField1ActionPerformed
            // Todo add your handling code here:
            
        }//GEN-LAST:event_jTextField1ActionPerformed

        private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FirsT:event_jTextField2ActionPerformed
            // Todo add your handling code here:
        }//GEN-LAST:event_jTextField2ActionPerformed

        private void jTextField4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FirsT:event_jTextField4ActionPerformed
            // Todo add your handling code here:
        }//GEN-LAST:event_jTextField4ActionPerformed

        /**
         * @param args the command line arguments
         * @return 
         * @return 
         * @throws InterruptedException 
         */
        
        
        public static void main(String args[]) {
             
            
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available,stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE,ex);
            } catch (illegalaccessexception ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE,ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(JFrame_Demo.class.getName()).log(java.util.logging.Level.SEVERE,ex);
            }
            //</editor-fold>

            /* Create and display the form */
            java.awt.EventQueue.invokelater(new Runnable() {
                public void run() {
                    try {
                        
                        
                        new JFrame_Demo().setVisible(true);
                        
                    } catch (FontFormatException | IOException e) {
                        // Todo Auto-generated catch block
                        e.printstacktrace();
                    } catch (InterruptedException e) {
                        // Todo Auto-generated catch block
                        e.printstacktrace();
                    }
                    
                }
            });
        }
        

                       
            
         

        // Variables declaration - do not modify//GEN-BEGIN:variables
        private javax.swing.JButton jButton1;
        private javax.swing.JCheckBox Exp_Schema_Check;
        private javax.swing.JCheckBox DB_Parameters_Sizing_Details;
        private javax.swing.JCheckBox Redo_Archive_Details;
        private javax.swing.JCheckBox Session_Details;
        private javax.swing.JCheckBox Tablespaces_Details;
        private javax.swing.JCheckBox SPM_Performance_Details;
        private javax.swing.JLabel DBUser_Input;
        private javax.swing.JLabel dbpassword1;
        private javax.swing.JLabel space_user_lable;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JLabel jLabel5;
        private javax.swing.jpasswordfield syspassword;
        private javax.swing.jpasswordfield schema_password;
        private javax.swing.JTextField Schema;
        private javax.swing.JTextField Username;
        private javax.swing.JTextField Instance;
        private JTextField host;
        private JTextField Port;
        hssfWorkbook workbook = new hssfWorkbook();
        private JLabel lblPoweredByDsgs;
        private JCheckBox selectall;
        private JProgressBar progressBar;
    }
    

非常感谢您。

解决方法

SwingWorker用于运行长任务。这里不是这种情况,因此您不需要一个。
以下是您要实现的目标的mre (1)

import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

public class SwingMain {

    SwingMain() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.add(new TestPanel());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new SwingMain();
    }
}

class TestPanel extends JPanel {

    private final List<JCheckBox> checkBoxes;

    public TestPanel() {

        checkBoxes = new ArrayList<>();
        for (int i=0; i<5; i++){
            JCheckBox cb = new JCheckBox();
            checkBoxes.add(cb);
            add(cb);
        }

        JProgressBar pb = new JProgressBar();
        add(pb);

        JButton btn = new JButton("Check");
        btn.addActionListener(evt ->  pb.setValue(countCheckedBoxes()* 100/checkBoxes.size()));
        add(btn);
    }

    private int countCheckedBoxes() {

        int counter = 0;
        for(JCheckBox cb : checkBoxes){
            if(cb.isSelected()) {
                counter++;
            }
        }
        return counter;
    }

    /* a more concise version using stream: 
    private int countCheckedBoxes() {
        return (int) checkBoxes.stream().filter(cb->cb.isSelected()).count();
    }
    */
}
 

编辑: 如果您需要更新长时间的进度,请使用SwingWorker

import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

public class SwingMain {

    SwingMain() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.add(new TestPanel());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new SwingMain();
    }
}

class TestPanel extends JPanel {

    private final JProgressBar pb;
    private final JButton btn;

    public TestPanel() {

        pb = new JProgressBar();
        add(pb);

        btn = new JButton("Run long process");
        btn.addActionListener(evt ->  new ProgressUpdateTask().execute());
        add(btn);
    }

    class ProgressUpdateTask extends SwingWorker<Void,Integer> {


        @Override
        protected void process(List<Integer> chunks) {
            int i = chunks.get(chunks.size()-1);
            pb.setValue(i); // The last value in this array is all we care about.
        }

        @Override
        protected Void doInBackground() throws Exception {
            btn.setEnabled(false);
            for(int i = 0; i < 100; i++) {
                Thread.sleep(50); //simulate long process
                publish(i);
            }
            btn.setEnabled(true);
            return null;
        }
    }
}

(1)在提问和回答时,始终考虑发布MRE。

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?