ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
563
563
EMPFEHLEN
-
Hallo zusammen,
leider bin ich bei der Forensuche und Google nicht fündig geworden
. Vielleicht hat jemanden einen Tip für mich oder kann mir sagen was ich falsch gemacht hab.
Also, wollte für mein Programm einen JDialog anzeigen lassen während das Programm längere Zeit arbeitet. Nichts wildes, erstmal nur einen Text "Bitte warten". Das funktioniert auch fast, aber der JDialog wird geöffnet, zeigt nichts an (ist eher Transparent) und wird dann wie geplant geschlossen. Wenn ich den nicht schließen lasse, dann wird der korrekt dargestellt, aber erst wenn der eigentliche Prozess fertig ist.
Bin ich damit total auf dem falschen Weg?
Dazu habe ich eine Klasse LadeDialog erstellt, die den Dialog anzeigt.
Der Konstruktor sieht so aus:
(erstellt in Netbeans)Code :1 2 3 4 5 6
public LadeDialog() { initComponents(); setVisible(false); setResizable(false); setLocationRelativeTo(null); }
Wenn ich den Dialog ganz normal öffnen lasse funktioniert alles und das JLabel wird auch angezeigt. Natürlich wird auch setVisible(true) gesetzt.
Dann hab ich noch eine Klasse process geschrieben, die einen Thread startet und dabei den JDialog öffnen soll:
die Methode heißt run, weil ich erst versucht hab von Thread abzuleiten, aber das bringt dasselbe Ergebnis.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
public class process { LadeDialog ld = null; boolean running = false; public process() { ld = new LadeDialog(); } public void run() { Thread th = new Thread() { @Override public void run(){ if(running == false) { ld.setVisible(true); running = true; } } }; th.start(); } public void closeDialog() { ld.dispose(); } }
So, dann versuche ich das so im Programm aufzurufen:
Code :1 2 3 4 5 6
// wenn etwas laenger dauert, soll das funktionieren process p = new process(); p.run(); // ... hier ist ganz viel, was gaaaanz lange dauert, oder so ähnlich // wenn das fertig ist, dann soll der Dialog wieder verschwinden... p.closeDialog();
Würde mich über eine Antwort freuen
MfG
-
21.01.11 19:16 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
Hi
Dein Problem liegt darin, dass der Thread, den du startest, das Fenster anzeigt. Man sollte aber von fremden Threads nicht auf Swing-Componenten zugreifen und diese verändern (wegen Threadsicherheit: deswegen steht auch in fast allen Swing-Klassen "Warning: Swing is not thread safe. For more information see Swing's Threading Policy." mit dem Link auf http://download.oracle.com/javase/6/...e-summary.html in den unteren Bereich.
Warum öffnest du das Fenster eigentlich in diesem Thread? mach das doch vorher!Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Hey,
Danke für die Antwort, das wusste ich noch nicht.
Wie meint du das öffnen? Der dialog ist doch bereits offen, nur noch nicht schtbar, der thread macht den nur sichtbar. Wenn das nicht in einem sep. Thread gemacht wird bleibt der dialog doch komplett weg unsichtbar, er würde erst angezeigt wenn das programm fertig ist, dann soll der aber schon nicht mehr sichtar sein. Sondern nur, während das programm etwas durchführt, bzw. wenn ich festlege, dass bei diesem ladevorgang etws angezeigt werden soll.
Denke ich da falsch?
-
Spontan würde ich es mal andersrum versuchen - lass das Programm in einem anderen Thread laufen, und öffne die Dialogbox ohne.
MfG - Pasukaru
---------------------
-
23.01.11 11:08 #5
- Registriert seit
- Jun 2009
- Beiträge
- 870
Sorry, war etwas unklar formuliert meinerseits. Ich meine du sollst setVisible(); nicht in dem Thread ausführen, sondern bevor du ihn erzeugst.
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Kling interessant, aber dafür müsste ich an allen Stellen wo der Dialog angezeigt werden soll Neue Threads erzeugen. Und der Thread müsste beim beenden den Dialog noch schließen?
Zitat von Pasukaru
ahso. Ja, das hab ich schon probiert. Das Ergebnis ist, dass der Dialog komplett angezeigt wird, aber das Programm nicht weiterläuft, erst wenn ich den Dialog selbst schließe läuft das Programm an dieser Stelle weiter.
Zitat von genodeftest
Wenn das nicht funktioniert, habt ihr evtl. eine Idee wie man sonst den Benutzer klarmachenkann dass etwas passiert und er nicht rumklicken soll?
-
Genau - ist vielleicht etwas umständlicher - aber ich glaube die Sinnvollste Möglichkeit. Wie du richtig gesagt hast, müsste der Dialog am Ende des Threads beendet werden.
Ja, das Problem ist, dass der Thread, in dem der Dialog anzeigt wird, so lange "einfriert" bis dieser wieder geschlossen wird. Ich hatte mal ein ähnliches Problem mit einem ServerSocket. Dort wurde auf eine eingehende Verbindung gewartet - und solange keine kam, war die GUI nicht bedienbar.Geändert von Pasukaru (24.01.11 um 16:58 Uhr)
MfG - Pasukaru
---------------------
Ähnliche Themen
-
PNG wird nicht korrekt angezeigt
Von karinsch im Forum PhotoshopAntworten: 1Letzter Beitrag: 17.03.10, 14:47 -
JDialog-Problem -> Ladedialog wird nicht angezeigt
Von Woggly im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 02.09.08, 15:50 -
DIV wird nicht korrekt angezeigt.
Von C4T im Forum CSSAntworten: 4Letzter Beitrag: 21.08.05, 19:14 -
Uhrzeit wird nicht korrekt angezeigt!
Von phap69 im Forum PHPAntworten: 8Letzter Beitrag: 26.04.05, 19:25 -
Newsletter wird im IE nicht korrekt angezeigt
Von Amr0d im Forum HTML & XHTMLAntworten: 5Letzter Beitrag: 20.10.04, 14:43





Zitieren
Login





