Hallo alle zusammen,
Ich will aus einem Fenster heraus einen Thread starten, welcher später einmal eine Dateisuche ausführen soll. Solange der Thread läuft, soll ein kleiner InfoDialog zu sehen sein. Dieser soll einen Button beinhalten, der es mir erlaubt den Thread abzubrechen. Ist der Thread durchgelaufen, soll das Fenster automatisch verschwinden und in der Konsole soll ausgegeben werden, dass der Thread zu Ende ist.
Momentan stehe ich hier:
Das Hauptfenster:
Der Trhead:
und der InfoDialog:
Ich hab den Code um einiges vereinfacht, und quasi das Problem isoliert (Es erscheint genau gleich wie in meinem richtigen Programm).
So wie der Code momentan da steht, wird der InfoDialog nicht ordentlich angeziegt und nimmt keine MouseEvents entgegen. Wenn ich den Dialog MODAL setze dann beendet sich das Fenster nicht automatisch. Ich hab auch schon versucht, den Thread aus dem Dialog heraus zu starten, wobei ich aber ebenfalls nicht zum Ziel gekommen bin.
Nun meine Frage: "Wie implementiere ich die gewünschte Funktionalität richtig?"
Ich komm grad wirklich nicht mehr weiter, ich glaub ich steh auf'm Schlauch oder hab das Problem komplett falsch angepackt. Eigentlich halndelt es sich hierbei um ein standard Problem, oder nicht.
Ich freue mich auf jeden Fall auf Hilfe von euch!!!
Nette Grüße!
Ich will aus einem Fenster heraus einen Thread starten, welcher später einmal eine Dateisuche ausführen soll. Solange der Thread läuft, soll ein kleiner InfoDialog zu sehen sein. Dieser soll einen Button beinhalten, der es mir erlaubt den Thread abzubrechen. Ist der Thread durchgelaufen, soll das Fenster automatisch verschwinden und in der Konsole soll ausgegeben werden, dass der Thread zu Ende ist.
Momentan stehe ich hier:
Das Hauptfenster:
Code:
public class ThreadsMain extends JFrame implements ActionListener {
private MyThread thread;
private InfoDialog info;
public void actionPerformed(ActionEvent e) {
info.setVisible(true);
thread.start();
try {
thread.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
info.setVisible(false);
System.out.println("Thread ende");
}
public static void main(String[] args) {
new ThreadsMain();
}
public ThreadsMain(){
super("ThreadTest");
th = new MyThread();
info = new InfoDialog(this, th);
JButton btn = new JButton("Start");
btn.addActionListener(this);
add(btn);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400,300);
setVisible(true);
}
}
Der Trhead:
Code:
public class MyThread extends Thread {
private boolean cancelled = false;
public void run(){
// Meine Suche läuft später auch in einer Schleife ab
for (int i =0; i < 5; i++){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (cancelled) break;
}
}
public void cancel(){
cancelled = true;
}
}
und der InfoDialog:
Code:
public class InfoDialog extends JDialog implements ActionListener {
private static final long serialVersionUID = 1L;
private MyThread thread;
public void actionPerformed(ActionEvent e) {
thread.cancel();
dispose();
}
public InfoDialog(Window owner, MyThread thread){
super(owner, "Info");
add (new JLabel("Läuft!", JLabel.CENTER), BorderLayout.CENTER);
JPanel pnl =new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton btn = new JButton("Abbrechen");
btn.addActionListener(this);
pnl.add(btn);
add(pnl, BorderLayout.SOUTH);
setSize(250, 100);
setResizable(false);
setLocationRelativeTo(owner);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
}
Ich hab den Code um einiges vereinfacht, und quasi das Problem isoliert (Es erscheint genau gleich wie in meinem richtigen Programm).
So wie der Code momentan da steht, wird der InfoDialog nicht ordentlich angeziegt und nimmt keine MouseEvents entgegen. Wenn ich den Dialog MODAL setze dann beendet sich das Fenster nicht automatisch. Ich hab auch schon versucht, den Thread aus dem Dialog heraus zu starten, wobei ich aber ebenfalls nicht zum Ziel gekommen bin.
Nun meine Frage: "Wie implementiere ich die gewünschte Funktionalität richtig?"
Ich komm grad wirklich nicht mehr weiter, ich glaub ich steh auf'm Schlauch oder hab das Problem komplett falsch angepackt. Eigentlich halndelt es sich hierbei um ein standard Problem, oder nicht.
Ich freue mich auf jeden Fall auf Hilfe von euch!!!
Nette Grüße!