连接到FTP时GUI崩溃(java)

时间:2015-09-01 08:34:31

标签: java swing user-interface ftp

我写了一个连接到FTP服务器的java程序,并在服务器上显示当前工作目录的内容列表。代码如下:

        public static void connect (){

        ftp = new FTPClient();
        FTPClientConfig config = new FTPClientConfig();
        ftp.configure(config);
        boolean error = false;

    try {
          ftp.connect(ftpConnect);
          ftp.enterLocalPassiveMode();
          ftp.login(ftpUsername, ftpPassword);
          System.out.println("Connected to " + ftpConnect); 
          System.out.println("Server Reply Code: "+ftp.getReplyString());
          getFileData();
          ftp.disconnect();

    } catch(IOException e) {
          error = true;
          e.printStackTrace();
        } finally {
          if(ftp.isConnected()) {
            try {
              ftp.disconnect();
            } catch(IOException ioe) {
              // do nothing
            }
          }
          System.exit(error ? 1 : 0);
        }
    }

    public static void getFileData(){
        try {
            fileFTP = ftp.listNames();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }      
    }

    public static void downloadFTPFile(final String source, String newFileName) {
        File checker = new File(source);
        if(checker.exists()){
            System.out.println("File \" "+source+"\"  already exists. Canceling donwload...");
            System.exit(1);

        } else {        
            try (FileOutputStream fos = new FileOutputStream(newFileName)) {    
                System.out.println("Downloading "+source+". This might take a while...");
                System.out.println("Go make yourself a cup of coffee. Or two...");


                ftp.retrieveFile(source, fos);
                System.out.println("Done!");  

            } catch (IOException e) {
                e.printStackTrace();
                }    
            }
        }

    public static void main(String[] args) throws IOException{
        connect();

    }   

}

我有一个重定向类,它将所有Sysout操作打印到我的swing GUI中的TextArea。但是,当我在GUI中启动FTP连接时,GUI本身就会消失,就像它崩溃一样,但在我的控制台上,所有输出都显示正确,但不是重定向。通过GUI,我还有其他被调用的函数,比如一个unzipper,对于其他所有函数,GUI工作得很好,并在textArea中显示所有SysOut的东西。这是FTPClient之间的某种不兼容的东西吗?

欢呼声

1 个答案:

答案 0 :(得分:1)

将此视为长评而非完整答案:

试着相信异常是你的朋友而不是敌人,而且几乎可以肯定你犯了错误而不是编译器:)。

  1. 你是否在没有GUI的情况下在控制台上运行程序?如果是这样的话,确切地追踪你所使用的软件包(有时不同版本的软件包可能会破坏你的程序。

  2. 打开相关的.jar文件,确保其中包含org.apache.commons.net.ftp

  3. 查看.jar​​文件版本。