Hallo,
ich habe eine Klasse (GUI), von der aus ich einen Kopiervorgang starten möchte (Kopieren von Bilddateien). Dabei möchte ich, dass wenn ich den Button für den Kopiervorgang drücke, zunächst ein JDialog erscheint, welches den Transferstatus angibt und anschließend die entsprechende Methode für den Kopiervorgang gestartet wird. Innerhalb der Kopierroutine möchte ich dann mit setText die Anzahl an kopierten bzw. noch ausstehenden Dateien im JDialog angeben.
Intuitiv bin ich hierbei wie folgt herangegangen
Das funktioniert aber nicht. Es erscheint das Dialog-Fenster wie gewünscht, aber der Kopiervorgang startet erst, nachdem ich dieses geschlossen habe .
Mit anderen Worten: Ich hab derzeit das Problem, dass es nicht klappt, Kopiervorgang und Anzeigen des JDialogs gleichzeitig durchzuführen. Welche Möglichkeiten gibt es, das Problem zu beheben?
Hier ist der Code für das JDialog:
Und das ist meine Kopier-Methode:
Vielen Dank im Voraus,
Infostudent.
ich habe eine Klasse (GUI), von der aus ich einen Kopiervorgang starten möchte (Kopieren von Bilddateien). Dabei möchte ich, dass wenn ich den Button für den Kopiervorgang drücke, zunächst ein JDialog erscheint, welches den Transferstatus angibt und anschließend die entsprechende Methode für den Kopiervorgang gestartet wird. Innerhalb der Kopierroutine möchte ich dann mit setText die Anzahl an kopierten bzw. noch ausstehenden Dateien im JDialog angeben.
Intuitiv bin ich hierbei wie folgt herangegangen
Code:
/* Button Kopieren wurde betaetigt */
if( e.getActionCommand().equals( "kopieren")) { /* Dies ist ein Auszug aus der Methode actionPerformed */
kopieren_status(); // Rufe das Status-Fenster auf
kopiereDateien(); // Rufe Methode für Kopiervorgang auf
}
Das funktioniert aber nicht. Es erscheint das Dialog-Fenster wie gewünscht, aber der Kopiervorgang startet erst, nachdem ich dieses geschlossen habe .
Mit anderen Worten: Ich hab derzeit das Problem, dass es nicht klappt, Kopiervorgang und Anzeigen des JDialogs gleichzeitig durchzuführen. Welche Möglichkeiten gibt es, das Problem zu beheben?
Hier ist der Code für das JDialog:
Code:
/**
* Statusfenster (zeigt Kopierfortschritt an)
*
*/
public void kopieren_status() {
int x = getFensterPosX();
int y = getFensterPosY();
d = new JDialog();
d.getContentPane();
d.setLayout( new GridLayout(9, 1) );
d.setTitle( " Dateien werden kopiert");
d.setSize( 450, 250);
d.setResizable( false );
d.setLocation( x+300, y+250);
d.setModal( true);
JLabel meldung1 = new JLabel( "Die Dateien werden kopiert. Bitte Warten.");
JPanel leiste1 = new JPanel( new FlowLayout());
JPanel leiste2 = new JPanel( new GridLayout( 1, 2));
JPanel leiste3 = new JPanel( new GridLayout( 1, 2));
JPanel leiste4 = new JPanel( new GridLayout( 1, 2));
leiste1.add( meldung1);
l2a = new JLabel( "Zu kopierende Dateien: ");
l2a.setHorizontalAlignment( JLabel.RIGHT);
l2b = new JLabel( "" + copy_anzahl);
l2a.setHorizontalAlignment( JLabel.LEFT);
leiste2.add( l2a);
leiste2.add( l2b);
l3a = new JLabel( "Kopierte Dateien: ");
l3a.setHorizontalAlignment( JLabel.RIGHT);
l3b = new JLabel( "" + copy_geschafft);
l3a.setHorizontalAlignment( JLabel.LEFT);
leiste3.add( l3a);
leiste3.add( l3b);
l4a = new JLabel( "Ausstehende Dateien: ");
l4a.setHorizontalAlignment( JLabel.RIGHT);
l4b = new JLabel( "" + (copy_anzahl - copy_geschafft) );
l4a.setHorizontalAlignment( JLabel.LEFT);
leiste4.add( l4a);
leiste4.add( l4b);
d.add( new JLabel( ""));
d.add( leiste1);
d.add( new JLabel( ""));
d.add( leiste2);
d.add( leiste3);
d.add( leiste4);
d.setVisible( true);
d.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE);
}
Und das ist meine Kopier-Methode:
Code:
/**
* Loeschen der Dateien im Tmp-Ordner und Kopieren der Bilder dort hin
*
*/
public void kopiereDateien() {
File dir = new File( InOut.getPfadProgramm() + "//Tmp");
File[] files = dir.listFiles();
if (files != null) { /* LOESCHE ALLE DATEIEN, DIE SICH IM TMP-VERZEICHNIS BEFINDEN! */
for (int i = 0; i < files.length; i++) {
files[i].delete(); // Datei löschen
}
}
String source;
String destination;
copy_anzahl = anz_ergebnisse + 1;
for( int i = 0; i < anz_ergebnisse; i++) {
int nummer = ergebnisse.get( i); /* BILDNUMMER UND BILDPFAD ERMITTELN */
Bild img = Registry.getRegistryEintrag( nummer);
String bildnummer = img.getBildnummer();
String bnr = bildnummer.toLowerCase();
String bildpfad = InOut.getBildpfad( bnr);
source = bildpfad;
destination = InOut.getPfadProgramm() + "//Tmp//" + bildnummer + ".jpg";
copy_geschafft = i+1;
l2b.setText( "" + copy_anzahl);
l3b.setText( "" + copy_geschafft);
l4b.setText( "" + ((copy_anzahl) - (copy_geschafft)) );
try { // Hier wird kopiert
RandomAccessFile datei = new RandomAccessFile( source,"r");
RandomAccessFile neudatei = new RandomAccessFile( destination, "rw");
while (neudatei.length() < datei.length()) {
neudatei.write(datei.read());
}
datei.close();
neudatei.close();
}
catch (IOException e) {
System.err.println( "Fehler beim Kopieren des Bildes " + bildnummer + ".");
}
}
}
Vielen Dank im Voraus,
Infostudent.