Nochmal Threads und Einfrieren des GUI :(

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi

ich weiss das es schon viele Posts dazu gibt und ich hab sie mir alle durchgelesen aber mein Problem konnte ich noch nicht lösen!

Ich hab ein Hauptfenster indem ich per knopfdruck das event auslöse was mir Probleme bereitet.

Code des Events des Hauptfensters:

Code:
        // Aufruf des zweiten Fensters
        jProgress jp = new JTrace.jProgress(); 
        jp.main(1000);

        // Aktionen

            try 
            { 
                Thread.sleep(10000); 
            } catch (InterruptedException e) {}

        // Aktionen & Ende

Die Pause in dem Event is wichtig da ich in der zeit ein anderes tool aufrufe was erst fertig mit seiner arbeiten sein muss!


Code des zweiten Fensters das dazu da is das einen Progressbat darzustellen:

Code:
public class jProgress extends Thread {
    
    final JFrame frame = new JFrame(); 
    final JProgressBar bar = new JProgressBar();
    final JButton butOk = new JButton("OK");
    private int time = 0;
    
    public void main(int tmpTime) {
        
        time = tmpTime;
        Thread th = new Thread(this); 
        th.start();
        
    }
    
    public void run() 
    { 
        butOk.addActionListener(new java.awt.event.ActionListener() 
        {
            public void actionPerformed(java.awt.event.ActionEvent evt) 
            {
                System.out.println("OK gedrückt!");    
            }    
        });    
        
        frame.setTitle("Progress:");
        Container pane = frame.getContentPane(); 
        pane.setLayout(new FlowLayout()); 
        pane.add(bar);
        pane.add(butOk);
        bar.setMinimum(0); 
        bar.setMaximum(100); 
        bar.setStringPainted(true);
        frame.setResizable(false);
        frame.setVisible( true );

        int i = 0; 
        while(i <= 100) 
        {                                       
            bar.setString("Working...");
            try 
            { 
                Thread.sleep(time); 
            } catch (InterruptedException e) {} 
            
            bar.setValue(i); 
            i++;
        } 
        bar.setString("Complete!"); 
    }
}

Während der 10sec Wartezeit im Hauptfenster aktualisiert sich das zweite fenster nicht! Erst wenn das Event durchgelaufen ist!

thx

Chris
 
G

Guest

Gast
anders gesagt das GUI verhält sich genauso als würde es in einem Thread laufen!

(tuts wahrscheinlich auch aber ka warum)
 
B

Beni

Gast
Chris hat gesagt.:
Die Pause in dem Event is wichtig da ich in der zeit ein anderes tool aufrufe was erst fertig mit seiner arbeiten sein muss!

Aber genau diese Pause verursacht das Problem. Hier wird das gesammte Swing blockiert.

Wäre es nicht möglich bei dem jProgress anstelle eines Frames einen modalen JDialog zu verwenden?

Code:
JFrame mainApplication = ...
JDialog dialog = new JDialog( mainApplication, "Progress", true );

Der blockiert dann nur die Eingaben.

mfg Beni
 
G

Guest

Gast
leider geht das nich

es ist wichtig das ich die pasue im quellcode des events habe! Nich das der user keine weiteren angaben machen kann sondern das wirklich gewartet wird!
 
G

Guest

Gast
falls ich jetzt anstatt der pause mit "Thread.sleep..." eine sehr komplexe Berechnung, die 10 sec dauert, hätte wäre das ergebnis doch das gleiche oder?

Das GUI würde sich 10 sek nicht aktualisieren und das kann doch nich sein. Dann find ich java sche.. wenn das nich möglich ist :)
 
B

Beni

Gast
Ausschnitt aus der API des JDialogs:

public void show()

Makes the Dialog visible. If the dialog and/or its owner are not yet displayable, both are made displayable. The dialog will be validated prior to being made visible. If the dialog is already visible, this will bring the dialog to the front.

If the dialog is modal and is not already visible, this call will not return until the dialog is hidden by calling hide or dispose. It is permissible to show modal dialogs from the event dispatching thread because the toolkit will ensure that another event pump runs while the one which invoked this method is blocked.

Kommt das an das heran, was du benötigst?

mfg Beni
 
G

Guest

Gast
ich hab den Code auf JDialog umgebaut aber leider hab ich jetzt noch ein anderes komisches Verhalten!

Das Programm läuft bis zur Show()-Methode und nicht weiter! Erst wenn ich das Fenster Schließe!

Code:
dialog.show();
        
        int i = 0; 
        while(i <= 100) 
        {                                       
            bar.setString("Working...");
            try 
            { 
                this.sleep(time); 
            } catch (InterruptedException e) {} 
            System.out.println("Zeile: " + i);
            bar.setValue(i); 
            i++;
        }

Show() wartet whrscheinlich auf user eingabe oder?
 
G

Guest

Gast
vll sollte ich mochmal beschreiben was ich als resultat haben möchte.

Ich drücke auf einen Knopf.
Ein Dialog erscheint und es läuft ein Progressbar los! (20 sec)
Beim Event des Konpfes wird etwas gemacht
dann 10 sec gewartet
dann wieder etwas gemacht

Die ganze Zeit soll der Progressbar weiterlaufen.
 

DreamArtist

Bekanntes Mitglied
Mach eine Monitorklasse die beide Klassen steuert.

z.B.:
Klasse Monitor ist die Steuerung

Klasse Eingabe extends Thread ist die Klasse die auf die Eingabe wartet

Klasse JProgress extends Thread ist die Klasse die eben das ausführt was in der Pause von der Eingabe sein soll

Funktionsweise:

Klasse Monitor erstellt eine Instanze von Eingabe und JProgress
Eingabe bekommt eine Referenz vom Monitor.
JProgress bekommt eine Referenz vom Monitor.

wird jetzt eine Eingabe gemacht benachrichtigt die EingabeKlasse den Monitor.
der sleept die Eingabe ein und startet den JProgress.

würde aber noch einen Flag setzen wenn der JProgress fertig ist.
damit bei langsamen Rechnern sich nicht eine Verzögerung ergibt, bzw bei schnellen Rechner der Benutzer nicht solange warten muß.
 
G

Guest

Gast
danke für deine Hilfe!

Das hört sich an wie die Lösung des Problems aber leider auch sehr kompliziert :)

Meine Klasse die auf Eingabe wartet ist das Hauptfenster wo ich den Button drücke oder?
Diese Klasse ist extends javax.swing.JFrame! Kann ich das ohne Probleme in Thread umändern?
Ich benutzte einen Form-Editor zum erstellen.

Gibt es irgendwo beispiele eines Codes mit dieser Implementierung?

cu

Chris
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JavaFX CSS und Vererbung - ich brauche nochmal etwas Nachhilfe AWT, Swing, JavaFX & SWT 28
M Nochmal Swing, MVC und generelles Design AWT, Swing, JavaFX & SWT 2
GilbertGrape nochmal editierbare Combobox AWT, Swing, JavaFX & SWT 3
D Nochmal ne Frage zum DefaultTableModel AWT, Swing, JavaFX & SWT 8
J Nochmal Drag&Drop, ABER: Object verschieben AWT, Swing, JavaFX & SWT 2
S Nochmal Spaltenbriete im Table AWT, Swing, JavaFX & SWT 2
S Nochmal GUI mit JMF Player AWT, Swing, JavaFX & SWT 13
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
N Netzwerk-Applikation, SWT und Threads AWT, Swing, JavaFX & SWT 4
R createBufferStrategy() und Threads AWT, Swing, JavaFX & SWT 5
D Threads unter JFrame AWT, Swing, JavaFX & SWT 2
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
G GUI "einfrieren"? AWT, Swing, JavaFX & SWT 5
G Fenster einfrieren AWT, Swing, JavaFX & SWT 18
Z komponenten "einfrieren" - abstand zwischen AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben