我正在使用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
我该怎么办?
答案 0 :(得分:3)
我不认为在多个请求中存储FTPClient
实例是一个好主意。您应该创建FTPClient
,使用它,然后立即丢弃它。这意味着您可以将其存储在局部变量中,而不必担心它不可序列化。 (顺便说一下,这是有道理的,因为它有一个复杂的状态,包括活动的TCP连接。)
答案 1 :(得分:0)
感谢您的建议!
我也用2个可能性来解决它:
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通信创建一个自己的类。