// in actionPerformed des GUI:else if(b.getText().equals("Download")) { String[] sub = {"content","texte"}; Transfer Download = new Transfer(Editor.URL,Editor.USERNAME, Editor.PASSWORD,Editor.PATH + "/texte/",sub,Transfer.DOWNLOAD); Download.run(); // und hier die Klasse Transfer: public class Transfer implements Runnable{ public static final int DOWNLOAD = 0; public static final int UPLOAD = 1; private int Type = -1; private FTPClient Client; private String Server, Path, SubDirectory = "/"; private Editor ed; public Transfer(String _Server, String Username, String Password, String _Path, String[] SubDirectories, int _Type) { try { Server = _Server; Type = _Type; Client = new FTPClient(Server); Path = _Path; Client.login(Username,Password); Client.setType(FTPTransferType.BINARY); for (int i=0; i<SubDirectories.length; i++) { Client.chdir(SubDirectories[i]); SubDirectory += SubDirectories[i] + "/"; } } catch (FTPException e) { String Bug = "Fehler: Transfer.Transfer() / FTPException: " + e; Editor.appendBug(Bug); System.out.println(Bug); } catch (IOException e) { String Bug = "Fehler: Transfer.Transfer() / IOException: " + e; Editor.appendBug(Bug); System.out.println(Bug); } } public void run() { try { if(Type==DOWNLOAD) { download(Client,Server + SubDirectory,Path); } else if (Type==UPLOAD) { upload(Client,Path,ed); } this.stop(); } catch (FTPException e) { System.out.println("Fehler beim FTP-Server: " +e); } catch (IOException e) { System.out.println("Fehler beim FTP-Server: " +e); } } // hier dann noch die download und upload-Methode // .. }