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()){
}
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