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:
Und hier ein Beispiel eines typischen Aufrufs:
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
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:
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:
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
