In my Java GUI app I have a JButton
and when clicked it calls a function
to connect to a database
, then calls a function
to clear
a table
in the DB
, then calls a function
that reads text from one file and loads variables
, which calls a function
that reads text from another file, compares the data
from both and then calls a function
to either update
or insert
data in the DB, all of that works fine.
However my question is related to the JButton
, when its clicked I want to run a Indeterminate progress bar
just so the user knows work is being done and then right before it leaves the the action listener setIndeterminate to false
and set the value of the progress bar
to 100(complete)
, but in my case when you click the button
it stays in the clicked state and the progress bar
freezes.
What should I implement to prevent this? threading possibly? but Im quite new to threading in java. here is my action listener:
private class buttonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if( e.getSource() == genButton )
{
progressBar.setIndeterminate(true);
progressBar.setString(null);
try
{
dbConnect(); //connects to DB
clearSchedules(); // deletes data in tables
readFile(); // reads first file and calls the other functions
dbClose();// closes the DB
progressBar.setIndeterminate(false);
progressBar.setValue(100);
}
catch (Exception e1){
System.err.println("Error: " + e1.getMessage());
}
}
}
}
On a side note, I would like to have the action bar actually move as the the program progresses but I wasnt sure how to monitor its progress.
Thanks, Beef.
UPDATE here is my example of SwingWorker and how I used it:
Declared globally
private functionWorker task;
private abstract class functionWorker extends SwingWorker {
public void execute() {
try {
dbConnect();
} catch (SQLException e) {
e.printStackTrace();
}
clearSchedules();
try {
readFile();
} catch (IOException e) {
e.printStackTrace();
}
dbClose();
}
}
Inside my actionPerformed method
if( e.getSource() == genButton )
{
progressBar.setIndeterminate(true);
progressBar.setString(null);
try
{
task.execute();
progressBar.setIndeterminate(false);
progressBar.setValue(100);
}
catch (Exception e1){
System.err.println("Error: " + e1.getMessage());
}
}
CLASSPATH
andPATH
in native variables in the systems advanced settings, but I dont thinkexecute
anddoInBackGround
are overridden methods in my swing work, cause when I tell it to add unimplemented/override methods it only adds one called construct – Seamus