Hallo,
mein Problem ist folgendes:
Ich habe ein Programm mit einer GUI, die GUI besteht gerade nur aus einem Button und wenn ich diesen Button drücke, soll ein Programm ausgeführt werden. z.B. Blast oder ein einfacher "ls"-Aufruf. Solange dieser Prozess aber dauert, soll der Button deaktiviert sein und sobald der Prozess fertig ist, soll der Button wieder aktivierbar sein.
Das Problem ist, dass der Button zwar deaktiviert wird, aber nicht mehr aktiviert wird.
Ich habe das mit SwingWorkers implementiert.
Außerdem möchte ich wissen, wann der Prozess startet und endet und diese Zeiten dann dem Hauptthread übergeben.
Wäre schön, wenn mal jemand drüberschaut.
Hier ist mein Code:
mein Problem ist folgendes:
Ich habe ein Programm mit einer GUI, die GUI besteht gerade nur aus einem Button und wenn ich diesen Button drücke, soll ein Programm ausgeführt werden. z.B. Blast oder ein einfacher "ls"-Aufruf. Solange dieser Prozess aber dauert, soll der Button deaktiviert sein und sobald der Prozess fertig ist, soll der Button wieder aktivierbar sein.
Das Problem ist, dass der Button zwar deaktiviert wird, aber nicht mehr aktiviert wird.
Ich habe das mit SwingWorkers implementiert.
Außerdem möchte ich wissen, wann der Prozess startet und endet und diese Zeiten dann dem Hauptthread übergeben.
Wäre schön, wenn mal jemand drüberschaut.
Hier ist mein Code:
Java:
package blastgui;
import java.awt.EventQueue;
import javax.swing.JFrame;
public class BlastGui {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run() {
JFrame frame = new BlastFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
Java:
package blastgui;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
class BlastFrame extends JFrame implements ActionListener, PropertyChangeListener{
JButton buttonRun;
Task task;
public BlastFrame() {
setTitle("Blast Test");
buttonRun = new JButton("RUN");
buttonRun.setActionCommand("run");
buttonRun.addActionListener(this);
JPanel panel = new JPanel();
panel.add(buttonRun);
add(panel);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("run")){
buttonRun.setEnabled(false);
String cmd = "ls";
task = new Task(cmd);
//task.addPropertyChangeListener(this);
task.execute();
}
}
}
Java:
package blastgui;
import javax.swing.JButton;
import javax.swing.SwingWorker;
public class Task extends SwingWorker<Void, Void>{
String cmd;
JButton button;
GeneralInfo genInfo = new GeneralInfo();
public Task(String command){
cmd = command;
button = new JButton("RUN");
}
@Override
protected Void doInBackground() throws Exception {
System.out.println("Startzeit: " + genInfo.getCurrentTime());
Process pr = Runtime.getRuntime().exec(cmd);
return null;
}
@Override
public void done(){
button.setEnabled(true);
}
}