Guten Morgen,
ich weiss dass es eine FAQ zu JProgressBars gibt, aber die verwendet Multithreading, das hab ich mir noch nicht angelesen bzw. verstehe ich noch nicht und deshalb wüsste ich gerne
a) ob es (in meinem Fall) nicht auch ohne Multithreading geht
b) wo mein Fehler ist
Es geht mir momentan darum, dass mehrere Dateien nacheinander in einer for-Schleife per StreamTokenizer eingeladen werden. Das ganze soll per JProgressBar dargestellt werden. Mein (entsprechend gekürzter) Code sieht wie folgt aus:
Der Gedanke (bzw. meine Hoffnung) ist, dass ich keinen Timer und nichts brauche und somit das ganze ja auch ohne Multithreading gehen könnte (denk ich mir mal so *g*). Mein Problem ist nun, dass zwar mein JFrame erscheint, aber das Label, der Button und die ProgressBar erst im Fenster erscheinen, wenn die For-Schleife komplett durchlaufen ist. Ich sehe also nur einen vollen Fortschrittsbalken mit dem String "LetzteDatei eingelesen" und vorher ein leeres Fenster. Kann mir da jemand helfen?
ich weiss dass es eine FAQ zu JProgressBars gibt, aber die verwendet Multithreading, das hab ich mir noch nicht angelesen bzw. verstehe ich noch nicht und deshalb wüsste ich gerne
a) ob es (in meinem Fall) nicht auch ohne Multithreading geht
b) wo mein Fehler ist
Es geht mir momentan darum, dass mehrere Dateien nacheinander in einer for-Schleife per StreamTokenizer eingeladen werden. Das ganze soll per JProgressBar dargestellt werden. Mein (entsprechend gekürzter) Code sieht wie folgt aus:
Code:
final JFrame RRprogframe = new JFrame("RVstat05 - Einlesen der Erhebungsdaten");
RRprogframe.setSize(320,240);
RRprogframe.setLocationRelativeTo(null);
RRprogframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel proginfo = new JLabel("Daten werden eingelesen...");
JProgressBar RRprogress = new JProgressBar(JProgressBar.HORIZONTAL,0,filename.length);
RRprogress.setValue(0);
RRprogress.setStringPainted(true);
RRprogress.setString("");
ActionListener proglistener = new ActionListener(){ public void actionPerformed(ActionEvent e){
RRprogframe.dispose();
}
};
JButton RRprogbutton = new JButton("OK");
RRprogbutton.addActionListener(proglistener);
RRprogbutton.setEnabled(false);
GridBagLayout RRprogGBL = new GridBagLayout();
RRprogGBL.addLayoutComponent(proginfo, new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));
RRprogGBL.addLayoutComponent(RRprogress, new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.HORIZONTAL,new Insets(0,5,0,5),0,0));
RRprogGBL.addLayoutComponent(RRprogbutton, new GridBagConstraints(0,2,1,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));
JPanel progpanel = new JPanel(RRprogGBL);
progpanel.add(proginfo);
progpanel.add(RRprogress);
progpanel.add(RRprogbutton);
RRprogframe.getContentPane().add(progpanel);
RRprogframe.setVisible(true);
for (int file = 0; file<filename.length; file++){
// StreamTokenizer liest eine Datei ein ...
RRprogress.setValue(file+1);
String purefilename = filename[file];
int slash = purefilename.lastIndexOf(System.getProperty("file.separator"));
purefilename = purefilename.substring(slash+1,purefilename.length());
RRprogress.setString(purefilename + " eingelesen.");
}
RRprogbutton.setEnabled(true);
Der Gedanke (bzw. meine Hoffnung) ist, dass ich keinen Timer und nichts brauche und somit das ganze ja auch ohne Multithreading gehen könnte (denk ich mir mal so *g*). Mein Problem ist nun, dass zwar mein JFrame erscheint, aber das Label, der Button und die ProgressBar erst im Fenster erscheinen, wenn die For-Schleife komplett durchlaufen ist. Ich sehe also nur einen vollen Fortschrittsbalken mit dem String "LetzteDatei eingelesen" und vorher ein leeres Fenster. Kann mir da jemand helfen?