0

我将 Apache Wicket 与 Apache Commons Net 一起使用。但是当我定义

new FTPClient(); //apache commons net library

我得到一个例外

org.apache.commons.net.ftp.FTPClient at.erpel.as2connector.testtool.protocols.FTP.client
[class=org.apache.commons.net.ftp.FTPClient] <----- field that is not serializable

我能做些什么?

4

2 回答 2

3

我不认为FTPClient在多个请求中存储一个实例是一个好主意。您应该创建自己的FTPClient,使用它,然后立即丢弃它。这意味着您可以将它存储在局部变量中,而不必担心它不能被序列化。(顺便说一句,这是有道理的,因为它具有复杂的状态,包括活动的 TCP 连接。)

于 2012-12-12T10:34:21.177 回答
0

谢谢你的建议!

我也用两种可能性解决了它:

1)您可以使字段瞬态:

transient FTPClient() client;

2)创建一个将使用 FTPClient 的父类的单例

public class AnyClass implements Serializable {

    private static AnyClass instance;

    private AnyClass() {

    }

    public static AnyClass getInstance() {
        if (instance == null) {
            instance = new AnyClass();
        }
        return instance;
    }

    FTPClient client = new FTPClient();
    ...
}

3)根据biziclop的建议:创建一个自己的类,只用于FTP通信。

于 2012-12-12T13:54:38.017 回答