ERLEDIGT
JA
JA
ANTWORTEN
1
1
ZUGRIFFE
789
789
EMPFEHLEN
-
Hi!
Ich versuche einen langen Ladevorgang für den Benutzer durch ein Statusfenster deutlich zu machen.
Mittlerweile laufen meine Threads vernünftig und auch das Fenster das den Statusbalken anzeigen soll erscheint. Aber leider ist es in den meisten Fällen vollkommen leer. Nur der Titel ist zu lesen.
Als die Threads noch nicht richtig liefen, es wurden mehrere Status Fenster geöffnet, liefen alle bis auf das erste Fenster richtig und zeigten an was sie sollten.
Leider habe ich keine Idee woran es liegen könnte. Für Hilfe wäre ich echt dankbar
Hier der Code für das Fenster:
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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
import java.util.*; public class StatusBar extends javax.swing.JFrame { private Thread calling = new Thread(); /** Creates new form StatusBar */ public StatusBar() { initComponents(); progress.setIndeterminate(true); } public StatusBar(Thread t) { initComponents(); calling = t; progress.setIndeterminate(true); } private void initComponents() { center = new javax.swing.JPanel(); progress = new javax.swing.JProgressBar(); north = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); south = new javax.swing.JPanel(); cancel = new javax.swing.JButton(); east = new javax.swing.JPanel(); west = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Tabelle wird geladen"); setResizable(false); center.setLayout(new javax.swing.BoxLayout(center, javax.swing.BoxLayout.X_AXIS)); center.add(progress); getContentPane().add(center, java.awt.BorderLayout.CENTER); jLabel1.setText("Bitte haben Sie einen Moment Geduld"); north.add(jLabel1); getContentPane().add(north, java.awt.BorderLayout.NORTH); cancel.setText("Abbrechen"); cancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelActionPerformed(evt); } }); south.add(cancel); getContentPane().add(south, java.awt.BorderLayout.SOUTH); getContentPane().add(east, java.awt.BorderLayout.EAST); getContentPane().add(west, java.awt.BorderLayout.WEST); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-400)/2, (screenSize.height-300)/2, 400, 300); } private void cancelActionPerformed(java.awt.event.ActionEvent evt) { setVisible(false); dispose(); } // Variables declaration - do not modify private javax.swing.JButton cancel; private javax.swing.JPanel center; private javax.swing.JPanel east; private javax.swing.JLabel jLabel1; private javax.swing.JPanel north; private javax.swing.JProgressBar progress; private javax.swing.JPanel south; private javax.swing.JPanel west; // End of variables declaration }
Und hier ein Beispiel eines typischen Aufrufs:
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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
Runnable fillingCSTable = new Runnable() { public void run() { if(opened == false) // um zu verhindern das mehr als ein Fenster geöffnet wird { showing = new StatusBar(); showing.setVisible(true); opened = true; } TableContent inside = receiver.getCSTable(thisone.getCIMInstance()); //Tabelle laden Vector content1 = new Vector(); Vector title1 = new Vector(); String caption1 = ""; try { content1 = inside.getContent(); title1 = inside.getTitle(); caption1 = inside.getCaption(); } catch(Exception e) { System.out.println("leere Tabelle"); } if(oneoftwo == 1) { fillContentInCIMComp(content1, title1,caption1); //bis hier aufbereiten der Tabelle für die Anzeige showing.setVisible(false); showing.dispose(); opened = false; Cursor point = new Cursor(0); getContentPane().setCursor(point); } else { fillContentInComputersystems(content1, title1, caption1); tableComputersystem.changeSelection(row , row, false, false); tableComputersystemMouseClicked(evt); } } };
Das Runnabel wird mit SwingUtilities.invokeLater(fillingCSTable); aufgerufen. In einer Methode, die von einem Eventhandler aufgerufen wird.
Mich verwirrt vor allem, das es manchmal klappt und manchmal nicht.
Hoffe sehr auf eure Hilfe
ulki
-
Hi,
Problem gefunden:
Da die GUI auf einen Rückgabewert wartet konnte sie sich nicht aktualisieren. Darum wurde das Fenster nicht ordentlich angezeigt. Habe das jetzt geändert.
(eine kleine Methode die aufgerufen wird wenn der Vorgang des Ladens beendet ist)
Danke fürs lesen und nachdenken
ulki
Ähnliche Themen
-
JList wird nicht immer angezeigt
Von Larrywayn im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 21.07.09, 19:06 -
Problem Swing: Contentpane wird nicht immer angezeigt
Von bk99 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 13.03.09, 11:44 -
AWT Fensterinhalt wird nicht immer angezeigt
Von raptot im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 16.05.08, 12:46 -
Thread-Problem in Swing: Fenster wird nur unvollständig angezeigt
Von henning-malaysia im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 07.11.06, 14:45 -
Batterie Status wird nicht angezeigt Win2000
Von Gudy im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 14.02.04, 13:56





Zitieren
Login





