FTP Upload Applet - ProgressBar

Status
Nicht offen für weitere Antworten.

MartinFH

Mitglied
Hallo,

ich bin gerade mitten im "Neueinstieg" für Java. Ich soll für einen Bekannten ein Java Applet zum FTP Upload schreiben.

Der Upload selber funktioniert einwandfrei - leider aber nicht die Anzeige der jProgressBar. Ich habe bereits einiges probiert, aber irgendwie funktioniert die Anzeige nicht korrekt. Da ich leider ein totaler Anfänger in Java bin, bekomme ich es trotz verschiedener Beispiele (Threads die ich hier im Forum gefunden habe) nicht hin.

Es würde mich freuen wenn sich einer kurz Zeit nimmt und mir meinen Fehler erklärt (bzw. eine Lösung parat hat)


Gruß und DANKE

Martin


Mein Code sieht wie folgt aus (hauptrolle spielt wohl die Void: btUploadActionPerformed):

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ClassFTP_Upload.java
 *
 * Created on 20.01.2009, 16:41:06
 */

package javaftp_upload;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.InputStream;
import java.util.StringTokenizer;
import java.io.IOException;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ProgressMonitorInputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import javax.swing.SwingUtilities;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.io.IOException;


//


public class ClassFTP_Upload extends javax.swing.JApplet {
    FTPClient client;
//    public static int BUFFER_SIZE = 102400000;
    /** Initializes the applet ClassFTP_Upload */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /** This method is called from within the init() method to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        DateiAuswahl = new javax.swing.JFileChooser();
        lblStatus = new javax.swing.JLabel();
        btUpload = new javax.swing.JButton();
        btDateiAuswahl = new javax.swing.JButton();
        lblDateiAuswahl = new javax.swing.JLabel();
        jProgressBar1 = new javax.swing.JProgressBar();

        lblStatus.setText("jLabel1");

        btUpload.setText("jButton1");
        btUpload.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btUploadActionPerformed(evt);
            }
        });

        btDateiAuswahl.setText("jButton2");
        btDateiAuswahl.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btDateiAuswahlActionPerformed(evt);
            }
        });

        lblDateiAuswahl.setText("jLabel2");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap(26, Short.MAX_VALUE)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jProgressBar1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(lblStatus, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 248, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(lblDateiAuswahl))
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(btDateiAuswahl)
                            .add(btUpload))))
                .add(47, 47, 47))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(39, 39, 39)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(btDateiAuswahl)
                    .add(lblDateiAuswahl))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(btUpload)
                    .add(lblStatus, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 23, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .add(31, 31, 31)
                .add(jProgressBar1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(162, Short.MAX_VALUE))
        );

        lblStatus.getAccessibleContext().setAccessibleName("lblStatus");
    }// </editor-fold>                        

    private void btUploadActionPerformed(java.awt.event.ActionEvent evt) {                                         
        File Datei;
        int DateiSize;
        InputStream DateiInputStream;
        OutputStream DateiOutputStream;

        jProgressBar1.setMinimum(0);
        
       __main: try {
            // TODO add your handling code here:
            client = new FTPClient();
            client.connect("ftp.meinedomain.de");
            lblStatus.setText("Connected");
            if (!client.login("loginname, "passwort")) {
                client.logout();
                lblStatus.setText("Abbruch");
                break __main;
            }
            lblStatus.setText("Login erfolgreich");
            client.enterLocalPassiveMode();
            client.setFileType(FTP.ASCII_FILE_TYPE);
            lblStatus.setText("Login zu 100%");

            Datei = new File(lblDateiAuswahl.getText());
            DateiSize = (int) Datei.length();

            setProgressMaximum(DateiSize);
            DateiInputStream = new FileInputStream(lblDateiAuswahl.getText());
            DateiOutputStream = client.storeFileStream("test123.dat");

            int counter = 0;
            byte[] buffer = new byte[1024];

            while(true){
                int bytes = DateiInputStream.read(buffer);
                if (bytes < 0)
                    break;
                DateiOutputStream.write(buffer, 0, bytes);
                counter += bytes;
                setProgressValue(counter);
                int proc = (int) Math.round(jProgressBar1.getPercentComplete() * 100);
                setProgressString(proc + "%");
                jProgressBar1.repaint();
            }
            DateiOutputStream.close();
            DateiInputStream.close();
            


        } catch (SocketException ex) {
            Logger.getLogger(ClassFTP_Upload.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ClassFTP_Upload.class.getName()).log(Level.SEVERE, null, ex);
        }


}                                        

    private void btDateiAuswahlActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
        DateiAuswahl.setCurrentDirectory(new File("."));
        int result = DateiAuswahl.showOpenDialog(this);
          lblDateiAuswahl.setText(DateiAuswahl.getSelectedFile().getAbsolutePath());
    }                                              

  protected void setProgressMaximum(final int value) {
    Runnable runner = new Runnable() {
      public void run() {
        jProgressBar1.setMaximum(value);
      }
    };
    SwingUtilities.invokeLater(runner);
  }

  protected void setProgressValue(final int value) {
    Runnable runner = new Runnable() {
      public void run() {
        jProgressBar1.setValue(value);
      }
    };
    SwingUtilities.invokeLater(runner);
  }

   protected void setProgressString(final String string) {

    Runnable runner = new Runnable() {

      public void run() {

        jProgressBar1.setString(string);

      }

    };

    SwingUtilities.invokeLater(runner);

  }

    // Variables declaration - do not modify                     
    private javax.swing.JFileChooser DateiAuswahl;
    private javax.swing.JButton btDateiAuswahl;
    private javax.swing.JButton btUpload;
    private javax.swing.JProgressBar jProgressBar1;
    private javax.swing.JLabel lblDateiAuswahl;
    private javax.swing.JLabel lblStatus;
    // End of variables declaration                   

}
 

Murray

Top Contributor
Der Upload passiert direkt im Event-Dispatching-Thread - das ist nicht gut und dürfte die Anwendung zuverlässig blockieren. An anderen Stellen hast Du ja auch schon mit Runnable und SwingUtilities.invokeLater gearbeitet - mach das auch noch für den Upload.
 

Ebenius

Top Contributor
Murray hat gesagt.:
Der Upload passiert direkt im Event-Dispatching-Thread - das ist nicht gut und dürfte die Anwendung zuverlässig blockieren. An anderen Stellen hast Du ja auch schon mit Runnable und SwingUtilities.invokeLater gearbeitet - mach das auch noch für den Upload.
Und dann läuft das Runnable per SwingUtilities.invokeLater im Event-Dispatching-Thread. :cool:
 

Murray

Top Contributor
Stimmt, so blockiert man das GUI nur etwas später. :oops:
Also besser das Runnable mit dem Upload nicht über SwingUtilities.invokeLater starten, sondern mit einem eigenen Thread.
 

MartinFH

Mitglied
Hallo,

super - danke für die schnellen Antworten. Werde das direkt einmal probieren (sobald ich das Applet am laufen habe).

Danke

Martin
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Upload Applet Java Basics - Anfänger-Themen 25
S Upload Applet Java Basics - Anfänger-Themen 6
H Upload Applet Java Basics - Anfänger-Themen 3
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
P Erste Schritte SFTP Upload Java Basics - Anfänger-Themen 10
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M FTP Down-/Upload Java Basics - Anfänger-Themen 3
R Upload Servlet: Ausgabe nicht korrekt Java Basics - Anfänger-Themen 2
E FTP upload storeFile() will nicht wie es soll Java Basics - Anfänger-Themen 6
C Fortschrittsanzeige für FTP Upload Java Basics - Anfänger-Themen 6
R Bild Upload Java Basics - Anfänger-Themen 16
J Image upload auf ImageShack,TinyPic usw. Java Basics - Anfänger-Themen 11
A File Upload programmieren Java Basics - Anfänger-Themen 4
K File Upload JSP Java Basics - Anfänger-Themen 2
L FTP-Upload erfolgreich? Java Basics - Anfänger-Themen 3
Y GUI-File-Upload Java Basics - Anfänger-Themen 3
M Java-Applet zur Mittelwertberechnung Java Basics - Anfänger-Themen 3
D Java Applet wird nicht im Browser angezeigt Java Basics - Anfänger-Themen 6
M bestehendes Projekt als Applet speichern Java Basics - Anfänger-Themen 2
S Erste Schritte Java - Applet - Rechteck ständig versetzen Java Basics - Anfänger-Themen 14
A Applet Plot für atan erstellen Java Basics - Anfänger-Themen 1
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
K JDK installieren displays java applet für MAC Java Basics - Anfänger-Themen 10
S Zeichen von abgerundeten Rechtecken auf einem Applet Java Basics - Anfänger-Themen 5
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
S Klassen Applet extern aufrufen Java Basics - Anfänger-Themen 1
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
C Applet Probleme Java Basics - Anfänger-Themen 1
A Compiler-Fehler Problem beim einbinden der applet Klasse Java Basics - Anfänger-Themen 2
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
G Applet in ein JSP einbinden Java Basics - Anfänger-Themen 1
C Java-Applet Fehler "NoClassDefFoundError"? Java Basics - Anfänger-Themen 1
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
C Kalender in Applet einfügen Java Basics - Anfänger-Themen 0
J JavaScript findet Applet Methode nicht Java Basics - Anfänger-Themen 2
J Punkte im Java-Applet verbinden Java Basics - Anfänger-Themen 4
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
K Applet funz. im Browser nicht Java Basics - Anfänger-Themen 11
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
thet1983 Erste Schritte <param> Tag in Applet Java Basics - Anfänger-Themen 4
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
G Signiertes Applet wird nicht ausgeführt Java Basics - Anfänger-Themen 1
Y Applet: Verschlüsselung Java Basics - Anfänger-Themen 3
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
F signiertes Applet fkt. nicht bei lokalem Aufruf Java Basics - Anfänger-Themen 2
K Frage zu Applet Java Basics - Anfänger-Themen 3
V While Schleife für ganzes Applet Java Basics - Anfänger-Themen 6
P Applet Histogramm Java Basics - Anfänger-Themen 6
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
G Java Applet aus Eclipse heraus testen? Java Basics - Anfänger-Themen 6
S Applet findet Klasse nicht Java Basics - Anfänger-Themen 7
R Java Applet mit Mausklick ansprechen Java Basics - Anfänger-Themen 3
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
S Applet-Objekt ist vor dem Hintergrund Java Basics - Anfänger-Themen 11
F Problem mit Applet Java Basics - Anfänger-Themen 5
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
S Erste Schritte Fenster wechsel im Applet Java Basics - Anfänger-Themen 7
S Applet Deployment Java Basics - Anfänger-Themen 2
X Applet Fehler: java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 45
H Applet - main()-Methode Java Basics - Anfänger-Themen 4
K Applet wird nicht im Browser und Appletviewer angezeigt Java Basics - Anfänger-Themen 5
L Applet : keine Recht für Zugriff auf Clipboard (trotz Zertifikat) Java Basics - Anfänger-Themen 4
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10
H Klassen in Eclipse stellt es im Ausgabe-Applet nicht dar Java Basics - Anfänger-Themen 5
L Applet soll Html-File öffnen Java Basics - Anfänger-Themen 2
L NetBeans Applet in html Java Basics - Anfänger-Themen 4
Dogge Start:Applet nicht Initialisiert Java Basics - Anfänger-Themen 11
D Applet beenden Java Basics - Anfänger-Themen 7
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
M RSA Applet ohne Cipher Java Basics - Anfänger-Themen 15
B String verschlüsseln - Applet - ohne BASE64 Java Basics - Anfänger-Themen 7
S Methode in Applet starten Java Basics - Anfänger-Themen 2
M AWT Applet - Button aus anderer Klasse abfragen Java Basics - Anfänger-Themen 4
W Probleme mit Java Applet Java Basics - Anfänger-Themen 5
M Applet kann in Browser nicht ausgeführt werden Java Basics - Anfänger-Themen 4
L Applet: Laden unterbricht den Browserfokus (scrollen) Java Basics - Anfänger-Themen 2
Z Applet startet nicht bei Domain mit Umlaut Java Basics - Anfänger-Themen 2
B Externe Libraries fuer Applet ... Pfad eingeben? Java Basics - Anfänger-Themen 23
Helgon ClassNotFound Applet Java Basics - Anfänger-Themen 6
U Applet Signiert und trotzdem Fehlermeldung Java Basics - Anfänger-Themen 18
E Schach in Java-Applet <No main classes found> Java Basics - Anfänger-Themen 5
S Applet Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
E Applet wird nicht angezeigt Java Basics - Anfänger-Themen 11
P Problem- Java Applet wird nicht ausgeführt Java Basics - Anfänger-Themen 9
B Applet - Laden eines Java-Fensters bricht ab Java Basics - Anfänger-Themen 6
N Import Problem, Applet will nicht Java Basics - Anfänger-Themen 6
M Applet Eclipse Vollbild Java Basics - Anfänger-Themen 3
K Befehl per Shell an Java-Applet JAR übergeben Java Basics - Anfänger-Themen 16
I Java Applet Java Basics - Anfänger-Themen 8
D Java Applet Dateien auf Server auslesen? Java Basics - Anfänger-Themen 8
L Referenced Libraries korrekt in Java Applet einbinden.. Java Basics - Anfänger-Themen 2
KBJ Java Applet Gästebuch Java Basics - Anfänger-Themen 12
T Java Applet braucht mehrere Minuten zu Start Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben