Problem mit Statusbalken-Thread in Applet

mansenpansen

Mitglied
Ich hatte mir eine Upload-Applikation mit Status-Balken geschrieben, welche
ohne Probleme funktioniert. Nun wollte ich das ganze als Applet ummodeln,
aber irgendwie klappt das mit den Threads da nicht so, wie ich mir das
vorstelle. Wenn ich den Upload über einen Button starte: kein Problem. Wenn ich den upload aber beim Start des Applets beginnen lassen möchte klappt das nicht. Meine Oberfläche wird zwar geladen, die Datei wird auch hochgeladen, aber mein Statusbalken "springt" nicht an.


hier der actionlistener mit dem es geht:

Code:
public void actionPerformed(ActionEvent e) {
        Runnable calculation = new Runnable() {
                public void run() {
                        do_upload(file_name, file_with_path);
                }
        };
        // Neuen Thread starten:
        new Thread(calculation, "CalculationThread").start();
   }
Habe das ganze so ausprobiert umzuschreiben:

Code:
public void start(){
      t = new Thread(this); // Anlegen eines Threads
      t.start();            // Starten des Threads
}

public void run()
{
     do_upload(file_name, file_with_path);
}
 
Hi,
implementiert dein Applet das Interface Runnable?
Sonst geht es nicht.

Oder probier mal das, dann brauchst du das Interface nicht:

Code:
public void startUpload(){
     Thread t = new Thread(){          // Anlegen eines Threads
         public void run(){
             do_upload(file_name, file_with_path);
         }
     }
      t.start();            // Starten des Threads
}
 
Zuletzt bearbeitet:
Danke erstmal für die schnelle Antwort. Runnable hatte ich implementiert. HAbe das jetzt mal rausgenommen, und so gemacht, wie du gesagt hast. Immer noch dasselbe Problem. Oder rufe ich start_upload dann falsch auf?

Das ganze sieht so aus: in meiner init() baue ich meine Oberfläche und rufe danach start_upload auf:

Code:
 public void init() {
        
        Label uploadStatus = new Label();
        Label uploadSpeed = new Label();
        Label uploadTime = new Label();
              
        uploadapplet bsp = new uploadapplet();
        uploadStatus.setText("Aktueller Upload-Status:");
        uploadSpeed.setText("Geschwindigkeit:");
        uploadTime.setText("Restdauer:");
        //button.addActionListener(bsp);

        GridBagLayout gbl = new GridBagLayout();
        this.setLayout(gbl);
        
        GridBagConstraints c = new GridBagConstraints();
        
        c.fill = GridBagConstraints.BOTH;   // wie Komponente Bereich füllen soll
        c.weightx = 350;                     // Breite
        c.weighty = 200;                    // Höhe
        c.insets = new Insets(0,5,5,5);   // Abstände definieren
        
......usw.

        start_upload();
    }

start_upload initialisiert den Thread, und ruft do_upload() auf. Hier wird die FTP-Verbindung hergestellt und der endgültige upload durch einen Aufruf der (externen) Funktion uploadFile gemacht:

Code:
public boolean uploadFile (String localFile, String serverFile, JProgressBar bar, Label speed, Label time) 
			throws IOException, FTPConnectionClosedException {
                File file=new File(localFile);
                long length = file.length()/1024;
                System.out.println(length+"Kb");
		FileInputStream fin = new FileInputStream(file);
                
                // JProgressBar "bar" initialisiert und dargestellt
                ProgressBarInputStream in = new ProgressBarInputStream(fin,bar,(int)file.length(),speed, time);

		boolean result = storeFile(serverFile, in);
		in.close();
		return result;
	}

Hier wird dann der Input durch die "ProgressBarInputStream"-Funktion geschleift und dann hochgeladen.
 
Zurück