Hallo,
ich plage mich mit folgendem Problem:
Ich habe einen JDialog mit einem Knopf (StartFenster). Bei Aktivierung soll ein neues Fenster2 erzeugt werden. Weil das etwas dauern kann, möchte ich diesen Vorgang mit einer ProgressBar überwachen, der in einem modalen JDialog (Fortschrittsfenster) angezeigt wird.
Nun das Problem. Verwende ich jre1.6.0_17, dann ist der Fokus nach Schließen des Fortschrittsfensters auf dem StartFenster. Das neu erzeugte Fenster2 liegt dahinter.
Verwende ich jre1.6.0, dann klappt es und das Fenster2 liegt oben auf und hat den Fokus.
Ich vermute mal, dass ich irgendwas Im Zusammenhang mit Swing und Threads nicht verstanden habe... Vielleicht kann mir da jemand auf die Sprünge helfen?
Hier der vereinfachte Code StartFenster:
Hier der Code meiner Fortschrittsanzeige:
ich plage mich mit folgendem Problem:
Ich habe einen JDialog mit einem Knopf (StartFenster). Bei Aktivierung soll ein neues Fenster2 erzeugt werden. Weil das etwas dauern kann, möchte ich diesen Vorgang mit einer ProgressBar überwachen, der in einem modalen JDialog (Fortschrittsfenster) angezeigt wird.
Nun das Problem. Verwende ich jre1.6.0_17, dann ist der Fokus nach Schließen des Fortschrittsfensters auf dem StartFenster. Das neu erzeugte Fenster2 liegt dahinter.
Verwende ich jre1.6.0, dann klappt es und das Fenster2 liegt oben auf und hat den Fokus.
Ich vermute mal, dass ich irgendwas Im Zusammenhang mit Swing und Threads nicht verstanden habe... Vielleicht kann mir da jemand auf die Sprünge helfen?
Hier der vereinfachte Code StartFenster:
Java:
public class Fenster extends JDialog implements ActionListener {
private JButton knopf;
private JPanel rahmen;
public Fenster(String title){
super();
setTitle(title);
knopf=new JButton("Do it!");
knopf.setBounds(10, 10, 80, 20);
knopf.addActionListener(this);
rahmen= new JPanel();
rahmen.add(knopf);
this.setBounds(50, 50, 350, 150);
this.add(rahmen);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Thread job = new Thread(){
public void run(){
Fortschrittsanzeige.max=10;
for (int i = 0; i<10; i++){
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Fortschrittsanzeige.wert=i;
}
new Fenster("Fenster2");
}
};
new Fortschrittsanzeige(job,this);
}
}
Hier der Code meiner Fortschrittsanzeige:
Java:
public class Fortschrittsanzeige{
public static Popup pop;
public static JDialog rahmen;
public static int max =0;
public static int wert=0;
private static Thread job_back;
private JProgressBar progress;
public Fortschrittsanzeige(final Thread job, final JDialog fenster){
rahmen = new JDialog();
rahmen.setTitle("Fortschritt");
progress = new JProgressBar();
System.out.println("Enter");
job_back=job;
job_back.start();
if (max>0){
progress.setMaximum(max);
progress.setValue(wert);
progress.setIndeterminate(false);
} else {
progress.setIndeterminate(true);
}
Thread checker = new Thread(){
public void run(){
while(job_back.getState()!=State.TERMINATED){
if (max>0){
progress.setMaximum(max);
progress.setValue(wert);
progress.setIndeterminate(false);
}
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
rahmen.dispose();
}
};
checker.start();
rahmen.add(progress);
rahmen.setPreferredSize(fenster.getSize());
rahmen.setBounds(fenster.getBounds());
rahmen.setModal(true);
rahmen.setVisible(true);
}
}