Listing running SwingWorker and stopping it

I have below SwingWorker;

public class WorkerTrying extends SwingWorker<Void, Void> {

        Statement stmt;
        Connection con;
        ResultSet rs;
        String connectionUrl = "jdbc:sqlserver://192.168.131.10;" + "databaseName=SomeDB;" + "user=" + "SomeUser" + ";" + "password=" + "SomeUserPassword" + ";";

        public void closeConnection() throws SQLException{
        stmt.close();
        System.out.println("Closed!!!");
        }

        protected Void doInBackground() throws Exception {

            String query = "Select column1,column2 from Table1"
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            con = DriverManager.getConnection(connectionUrl);
            stmt = con.createStatement();

            rs = stmt.executeQuery(query);

            while (rs.next()){
              //Doing something...
            }

            return null;
        }

        public void done() {               

        }  
    }

As you can see some DB and fetchinbg data connection through the While loop in this working. My problem in DB Queries is very time consuming. I want to add a STOP button to close statements and connections in SwingWorker and cancel it immediately.

I try to press the stop button, but it does not help;

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
      WorkerTrying workerTrying = new WorkerTrying();
      workerTrying.cancel(true);
    } 

I also have 3-4 SwingWorkers. Therefore, I must determine which one is currently running.

Sincerely.

==== UPDATE ====

New Stop button, for example:

jButtonStop.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
            for(SwingWorker workerTrying : _workers){
                 if(!workerTrying.isDone()){
                    try {
                        ((WorkerTrying)workerTrying).closeConnection();
                    } catch (SQLException ex) {
                        Logger.getLogger(MainGui.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    workerTrying.cancel(true);
                 }
            }

       }
   }
});

==== SECOND ISSUE UPDATE ====

Start button. An event listener is just like that;

startButton.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  if(jTextField1.getText().equals("")){
                    final SwingWorker workerTrying = new WorkerTrying();
                    _workers.add(workerTrying);
                    workerTrying.execute();
                  }
                  else{
                    final SwingWorker workerTrying2 = new WorkerTrying2();
                    _workers.add(workerTrying2);
                    workerTrying2.execute();  
                  }
                }
});

As you can see some conditions for which SwingWorker can be met.

Stop button just like that:

stopButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                for (SwingWorker workerTrying : _workers) {
                    if(!workerTrying.isDone()){
                        try {
                            ((WorkerTrying)workerTrying).closeConnection();
                        } catch (SQLException ex) {
                            Logger.getLogger(MainGui.class.getName()).log(Level.SEVERE, null, ex);
                        }
                        workerTrying.cancel(true);
                    }
                }
                for (SwingWorker workerTrying2 : _workers) {
                    if(!workerTrying2.isDone()){
                        try {
                            ((WorkerTrying2)workerTrying2).closeConnection();
                        } catch (SQLException ex) {
                            Logger.getLogger(MainGui.class.getName()).log(Level.SEVERE, null, ex);
                        }
                        workerTrying2.cancel(true);
                    }
                }
            }
        });

First SwingWorker (workTrying) , . , SwingWorker .

SwingWorker (workerTrying2) , ,

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: testproject.MainGui$WorkerTrying2 cannot be cast to testproject.MainGui$WorkerTrying
+4
1

List . . .

 public class SwingT {
    private List<SwingWorker> _workers = new ArrayList<>();
    public SwingT(){
        JFrame frame = new JFrame("Test Worker");        
        frame.setSize(320, 160);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        JButton btn = new JButton("Add Work");
        btn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SwingWorker workerTrying = new WorkerTrying();
                _workers.add(workerTrying);
                workerTrying.execute();
            }
        });

        JButton btn2 = new JButton("Stop All");
        btn2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                for(SwingWorker workerTrying : _workers){
                    if(!workerTrying.isDone()){
                        //Close DB Connections
                        ((WorkerTrying)workerTrying).closeConnection();
                        workerTrying.cancel(true);
                    }
                }

            }
        });
        frame.add(btn);
        frame.add(btn2);
        frame.setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new SwingT();

    }

}

UPDATE

public class WorkerTrying  extends SwingWorker<Void, Void> {

public void closeConnection(){
    //Close the connection
    System.out.println("closed");
}

..........
}
+1

Source: https://habr.com/ru/post/1589147/


All Articles