PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Jdialog mit Jprogressbar in eigenem Thread - Wie parrent setzen?



k4zZ
09-04-2007, 21:03
Hallo alle zusammen & frohe Ostern nachträglich! ;)

Ich arbeite gerade an einem kleinen Javaprogramm wo ein komplexer vorgang ausgeführt werden soll, welcher einige zeit in anspruch nehmen wird. Deswegen möchte ich dass sich vor meinem Hauptfenster ein JDialog mit JProgressbar öffnet (mit setIndeterminate(true) solange diese aufgabe läuft. Dieser JDialog soll das Hauptfenster blockieren so das man keine eingaben machen kann.

Nach Abschluss der komplexen Aufgabe soll sich das fenster wieder verschwinden und die GUI wieder freigeben. Das ganze lässt sich ja normalerweise mit dem parrent parameter lösen.

Ich hab soweit alles hinbekommen, nur das das Hauptfenster gesperrt wird klappt nicht so recht -der Benutzer kann noch fröhlich klicken ;).

Ich starte den JDialog zusammen mit der Aufgabe zusammen in einem eigenen Thread der durch den ActionHandler des hauptfensters aufgerufen wird. Seht es euch am besten mal selbst an - für eure Hilfe wäre ich euch echt dankbar!

Überigens: Ein aussagekräftigeres voll lauffähiges Beispiel habe ich als neteansprojekt angefügt.

Auszug aus der GUI.java:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Thread taskThread = new Thread()
{
public void run(){
ProgressDialog dialog = new ProgressDialog();
dialog.setLocationRelativeTo(null);
Task.ComplexTask();
dialog.dispose();
}
};
taskThread.start();
}

mehlvogel
10-04-2007, 09:22
dialog.setModal(true)


Das aufgerufen, bevor du den Task startest sollte die anderen Fenster blockieren. Ab Java 6 gibt es die Methode setModalityType die benutzt werden sollte, da musst du vielleicht nochmal in die API schauen, was da konkret benutzt werden muss.

k4zZ
10-04-2007, 15:48
Danke für deine antwort. Die idee mit "setModal" ist gut nur leider will sie nicht so recht funktionieren =/. Kann das daran liegen das dass fenster mit in dem neuen Thread erstellt wird?

Die andere Sache mit "setModalityType()" möcht ich doch nicht benutzen weil ich mich nun doch entschlossen hab, java 1.5 mit zu unterstützen... deswegen hab ich mein angehängtes beispiel oben jetzt auch auf java 1.5 umgemüntzt ;).