Frame bleibt schwarz beim Laden

Status
Nicht offen für weitere Antworten.

Johnny00

Mitglied
Hallo liebes Forum,

ich bin auf ein kleines Problem gestoßen.
Ich bin dabei ein Programm zu schreiben, welches Emails versendet.
Das Ganze findet in der Klasse Client statt.
Wenn ich auf den "Senden" Button klicke, soll zeitgleich aber noch ein neuer Frame erscheinen mit einer JProgressBar um den aktuellen Fortschritt anzuzeigen.

Java:
....
// pb enthält Progressbar
        pb.setVisible(true);
        pb.pack();
        bar.setValue(0);
        bar.setStringPainted(true);

        Connection con = new Connection ();
        con.send();
        JOptionPane.showMessageDialog ( ... );
...

so in etwa sieht das Ganze dann aus.
Nun tritt folgendes Problem auf:

Ich klicke auf Senden, mein Frame öffnet sich, aber es bleibt schwarz.
Im Hintergrund wird die Email verschickt.
Am Ende wird mein JOptionPane angezeigt und dann wird auch mein Frame richtig angezeigt mit der JProgressBar.

Wenn ich die Verbindug (Connection) und das Senden also weglasse, wird mein Frame mit der Progressbar korrekt angezeigt.
Sobald ich aber die Verbindung aufbaue und probiere die Email zu senden bleibt mein Frame schwarz,
und wird dann erst richtig sichtbar nachdem meine Email verschickt wurde (die Verbindung beendet wurde).

Wieso ist das so, und wie kann ich diesen "Bug" beheben, sodass erst mein Frame korrekt angezeigt wird und im Hintergrund meine Nachricht verschickt wird?
Ich denke dafür muss ich eine der beiden Prozesse als Thread parallel laufen lassen.. hab ich auch probiert nur mein Frame bleibt immernoch Schwarz ???:L ???:L

Wäre nett wenn ihr mir helfen könntet !!

Mit freundlichem Gruß
Johnny
 
Zuletzt bearbeitet:

javimka

Top Contributor
setVisible muss nach pack() und den Modifikation an bar aufgerufen werden. Möglicherweise löst dies das Problem aber noch nicht. Wird dieses Code Fragment von einem ActionListener, der an einen Button angehängt ist ausgeführt?
 

Johnny00

Mitglied
Also wenn ich setVisible() nach pack() aufrufe, dann bleibt mein JFrame weiß..
und wie üblich nachdem die Connection beendet wurde wird mein JFrame ganz normal mit der ProgressBar angezeigt.

Hier kann man das Szenario beobachten:

1. Ich klicke auf Send



2. Connection wurde aufgeführt



3. Dialog von Connection geschlossen



Ja genau, ich habe ein JFrame mit meinen ganzen Elementen,
und das Fragment wird ausgeführt nachem ich auf den Senden Button klicke.. in dem Fall:

Java:
    private void sendActionPerformed(java.awt.event.ActionEvent evt) {
        send.setEnabled (false);
        error = -1;

        //new Loaded (this).start();
        bar.setValue(0);
        bar.setStringPainted(true);
   
        pb.pack();
        pb.setVisible(true);

        Connection con = new Connection ( );
        con.run(); // Senden der Email
        con = null; // 
    ...
}
(Netbeans :p)

Ich bin echt ratlos .. :/
 

javimka

Top Contributor
versuch es mal mit:
Java:
SwingUtilities.invokeLater(new Runnable() {
	public void run() {
		Connection con = new Connection ( );
        con.run(); // Senden der Email
        con = null; // 
	}
});
 

Johnny00

Mitglied
hmm sehr merkwürdig.. mein Connection objekt hat ja noch einige lokale variablen als parameter,
aber wenn ich das in nem runnable packe kommt sofort die meldung "Email konnte nicht verschickt werden"

Java:
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Connection con = new Connection ( Client.this, Client.this.obj, Client.this.email );
                con.run ();
                con = null;
            }
        });

       if (error == -2) // Email Erfolgreich
       else // Fehler

Mein Objekt Connection greift auf meine lokale error Variable im Client.
Wenn error auf -2 gesetzt wird nach der Senderoutine, dann sieht das man Client und weiß, dass die Email erfolgreich verschickt wurde. Das Problem ist aber wenn ich das mit dem Runnable mache, bleibt mein error immer auf -1, also standardwert.. gibts da irgendwelche probleme mit den Referenzen?? Kann meine Connection nicht auf Client.this zugreifen??
 

Johnny00

Mitglied
Nein es hilft alles nichts .. mein Connection will sich nicht verbinden.
Normalerweise wenn ich auf senden klicke dann braucht er erstmal einige Sekunden um sich zum Server zu verbinden
nun spuckt der mir aber sofort ne fehlermeldung raus.

Ich habe auch probiert meine Objekte obj und email als globale Vairbalen zu deklarieren und dann mittels getter methoden an connection zu übergeben.. also in dem fall:

Java:
    public Connection ( Client main ) {
        this.main   = main;
        this.obj = main.getObj();
        this.email = main.getMail();
        ....
        this.initialize ();
    }

..klappt aber trotzdem nicht .. ich bin echt ratlos ...
 

javimka

Top Contributor
Ich wusste nicht, dass da noch mehr kommt ^^
Das SwingUtilities.invokeLater fügt einen neuen Job an die EventQueue an, die dann später abgearbeitet wird. Alles, was mit dem Email-Versenden zu tun hat, müsste da rein. Ich denke nämlich, dass das Email-Versenden etwas lange dauert und deine GUI in dieser Zeit schwarz bleibt. Wenn du den Job aber zu hinterst an die Queue anhängst, dann kann die GUI bereits gezeichnet werden und danach wird die Email versendet.
Eine mögliche Alternative wäre es, kein SwingUtilities zu verwenden aber das setVisible noch weiter hinten, nach all den Befehlen für das Versenden hinzusetzen. Dann müsstest du einfach warten, bis das Versenden abgearbeitet ist, bevor das Fenster angezeigt wird, dafür sollte es dann flüssig funktionieren.
 

Johnny00

Mitglied
Yes, es hat geklappt :)

Ja du hast recht, dort musste alles rein, was mit dem Email versenden zu tun hat..
ich hab das jetzt so gemacht:

Java:
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Connection con = new Connection ( Client.this, Client.this.obj, Client.this.email );
                con.run ();
                con = null;

                if (error == -2) // Email Erfolgreich
                else // Fehler
            }
        });

und es klappt einwandfrei !
Danke dir :D
 

javimka

Top Contributor
Naja, soooo produktiv sind die beiden Zeilen ja jetzt nicht, aber ich gehe mal davon aus, dass du da schon noch was dazwischen flickst ;)

Gern geschehen.
 

Johnny00

Mitglied
Hehe ja ich habs alles fertig, nur ein Problem besteht... jetzt wird meine ProgressBar nicht aktualisiert.
Ich baue das SMTP Protokoll auf in Connection und nach jedem Teilschritt will ich die Progressbar z.b. um 5% erhöhen.
Dazu rufe ich dann die Methode:

Java:
    public void setProgressStatus (int val) {
        this.bar.setValue (val);
    }
auf im Client. Die Anziege wird aber nicht geupdated. Erst am Ende nachdem das Senden ausgeführt wurde wird meine Bar geupdated. Kannst du mir bitte noch ein letztes mal helfen?? Du hast mir eig. schon mehr als genug geholfen.. aber wär cool wenn du auch hier weiter rat wüsstest..
 

javimka

Top Contributor
Vielleicht klappt es so:
Anstatt SwingUtilities.invo.... schreibst du:
Java:
       new Thread() {
            public void run() {
                Connection con = new Connection ( Client.this, Client.this.obj, Client.this.email );
                con.run ();
                con = null;
 
                if (error == -2) // Email Erfolgreich
                else // Fehler
            }
        }.start();

Wenn das nicht geht, dann schreibst du das da oben in die SwingUtilities.invokeLater(new Runnable { public void run() { ... } } ); hinein. Aber ich hoffe, das erste funktioniert bereits.
 

Johnny00

Mitglied
Oh man.. ich hab mein code so aufgepusht. Hab SwingUtilities und den Thread benutzt und nun klappts.. ENDLICH :D

Danke vielmals :))
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Frame bleibt grau Java Basics - Anfänger-Themen 5
Alex_99 Aktion ausführen wenn Frame disposed wurde Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
S GUI Frame wechseln Java Basics - Anfänger-Themen 15
C Exportierte JAR öffnet zweiten Frame nicht mehr Java Basics - Anfänger-Themen 7
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
C Erste Schritte Spieler an anderen Frame weitergeben Java Basics - Anfänger-Themen 23
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
R Erste Schritte Frame mit Ladebalken und BestätigungsButton Java Basics - Anfänger-Themen 10
das_leon Interface Frame in einem Frame (Window Builder) Java Basics - Anfänger-Themen 2
Anfänger2011 Frame zeigt nicht gewünschtes Ergebnis an ... Java Basics - Anfänger-Themen 5
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
I Methoden Schwierikeiten mit Protokollfenster (Frame Objekt) Java Basics - Anfänger-Themen 4
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
W Frame in anderer Klasse anzeigen lassen Java Basics - Anfänger-Themen 1
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
L bestimmten Frame anzeigen lassen? Java Basics - Anfänger-Themen 6
H Textfeldinhalt löschen nachdem Frame geschlossen wird Java Basics - Anfänger-Themen 8
L Kalender Java Frame Java Basics - Anfänger-Themen 7
A Frame Java Basics - Anfänger-Themen 3
P Verwirrung mit AWT Frame und main Methode Java Basics - Anfänger-Themen 19
A Frame java Java Basics - Anfänger-Themen 3
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
J Erste Schritte Speichern / Speichern unter / title Frame Java Basics - Anfänger-Themen 5
F Frame in Frame Java Basics - Anfänger-Themen 3
U GUI - resize frame Java Basics - Anfänger-Themen 13
J Open reading Frame Java Basics - Anfänger-Themen 4
J Erstelltes Frame wird nicht angezeigt Java Basics - Anfänger-Themen 2
K Frame öffnen klappt nicht?! Java Basics - Anfänger-Themen 36
JAVAnnik Anwendung nach Schließen vom letzen Frame Java Basics - Anfänger-Themen 9
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
A Frame Background Java Basics - Anfänger-Themen 21
S Klassen Klassenname = Frame? Java Basics - Anfänger-Themen 11
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
I Java - Text in neuem Frame wird nicht angezeigt Java Basics - Anfänger-Themen 4
M Frame mit mehreren areas Java Basics - Anfänger-Themen 14
B Frame über Button öffnen Java Basics - Anfänger-Themen 8
R Button soll neuen Frame öffnen Java Basics - Anfänger-Themen 21
L Variablen Frame Variablen-Schleife Java Basics - Anfänger-Themen 3
D Neues Frame öffnen Java Basics - Anfänger-Themen 7
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
F frame wird nicht angezeigt? Java Basics - Anfänger-Themen 10
S 2 Panels in einen Frame Java Basics - Anfänger-Themen 5
H Panels in Frame einbinden Java Basics - Anfänger-Themen 3
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
A Bild wird auf Frame nicht angezeigt! Keine Fehlermeldung Java Basics - Anfänger-Themen 3
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
T Frame öffnen Java Basics - Anfänger-Themen 6
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
I JTable in bestehenden Frame integrieren Java Basics - Anfänger-Themen 6
Y Hilfe: JOGL / OPENGL in Frame Java Basics - Anfänger-Themen 2
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
Luk10 Frame schließen Java Basics - Anfänger-Themen 2
A Frame schließen!? Help! Java Basics - Anfänger-Themen 5
A Frame reagiert nicht Java Basics - Anfänger-Themen 6
H Modalen JDialog schließen, ohne dabei das Parent-Frame zu schließen Java Basics - Anfänger-Themen 7
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
R Frame Inhalt ausrichten Java Basics - Anfänger-Themen 5
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Stillmatic1985 Label in einem Frame zentrieren Java Basics - Anfänger-Themen 4
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
A Java Frame per X schließen? Java Basics - Anfänger-Themen 7
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
kulturfenster Per Button Frame schliessen Java Basics - Anfänger-Themen 2
C Frame, JFrame, JDialog Java Basics - Anfänger-Themen 12
I JButton zum frame schließen Java Basics - Anfänger-Themen 6
M Variable in Frame anzeigen Java Basics - Anfänger-Themen 11
O Beim Schließen JDialog, im Frame-Owner eine Methode starten Java Basics - Anfänger-Themen 6
hdi Desktop-Auflösung abfragen -> setLocation() von Frame Java Basics - Anfänger-Themen 5
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
S Übergabe von Frame-Objekt - kritisch? Java Basics - Anfänger-Themen 7
N Frame in Frame erstellen Java Basics - Anfänger-Themen 2
B Java-Frame Taschenrechner - String -> Int und umgekehrt Java Basics - Anfänger-Themen 8
G Bild wird im falschen Frame angezeigt Java Basics - Anfänger-Themen 5
G Frame soll Focus behalten Java Basics - Anfänger-Themen 2
H Frame schließen Java Basics - Anfänger-Themen 5
G Frame Applet oder doch was anderes Java Basics - Anfänger-Themen 2
M Frame zeigt Desktop als Hintergrund Java Basics - Anfänger-Themen 2
J Eine swf-datei in einen Frame einfügen? Java Basics - Anfänger-Themen 6
K Schrift und Farben im Frame (Anfänger) Java Basics - Anfänger-Themen 2
D Frame in Center Screen Java Basics - Anfänger-Themen 7
A Frame aus Applet erzeugen und mit Inhalt füllen Java Basics - Anfänger-Themen 5
G Problemme mit: Aufruf einer Klasse aus einem Frame Java Basics - Anfänger-Themen 5
M Frame Schließen Java Basics - Anfänger-Themen 5
H homepage in frame aufrufen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben