NoSuchFieldError\u主机名\uFTPSClient Java带解释器

NoSuchFieldError\u主机名\uFTPSClient Java带解释器,java,eclipse,ftp,interpreter,Java,Eclipse,Ftp,Interpreter,我正在尝试从Apache中获取FTPSClient示例(请参见此处: ) 在Eclipse中,此示例代码运行良好,我可以将文件上载到服务器。当我尝试在解释器中编译代码时,解释器也可以运行普通的java源代码,但它仍然可以工作。但当我启动编译程序时,我会出现以下错误: java.lang.NoSuchFieldError: _hostname_ org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:266) org

我正在尝试从Apache中获取FTPSClient示例(请参见此处: )

在Eclipse中,此示例代码运行良好,我可以将文件上载到服务器。当我尝试在解释器中编译代码时,解释器也可以运行普通的java源代码,但它仍然可以工作。但当我启动编译程序时,我会出现以下错误:

java.lang.NoSuchFieldError: _hostname_
org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:266)
org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:226)
org.apache.commons.net.SocketClient.connect(SocketClient:163)
org.apache.commons.net.SocketClient.connect(SocketClient:250)
FTPSExample.doMyUpload(FTPSExample.java:93)
最后一句话是用我自己命名的方法上课。在第93行中,我只是尝试连接到服务器:

this.ftps.connect(this.server);
Eclipse和我的解释器都采用放置commons.net.jar的相同类路径(3.6)。所以我真的不知道,为什么会出现这个错误。 如果你需要看全班,我可以把它贴在这里。但是我没有对Apache的原始示例进行任何更改


谢谢你,Louis

很可能,你使用的是旧版本的Commons Net jar或
SocketClient
类。字段变量
\u hostname\u
从Commons Net 3.4版开始引入。另见。该字段在抽象类
SocketClient
中定义,并由扩展类
FTPSClient
使用。如果同时使用了新版本的
FTPSClient
和旧版本的
SocketClient
,则会抛出
java.lang.NoSuchFieldError:_hostname\u

?在我的类路径中只有最新的commons-net-3.6.jar。我重新编译了所有内容,但错误仍然存在。
WEB-INF/classes/org/apache/commons/net/
中是否有
SocketClient.class
?如果是,请将其备份(删除)到其他位置。如果没有,请尝试替换从下载的jar文件。因此,我按照您所说的做了,删除并备份了SocketClient.class,并重新编译了我的FTP客户端类和我的EBUS程序。当我启动EBUS程序时,同样的错误也会发生。我现在能做什么?更新:我不能编译我的Eclipse类,因为SocketClient.Class丢失了-现在怎么办?好的,我想我发现了错误:在我的类路径中有另一个.jar文件,它有一个SocketClient.Class(可能是它的旧版本)。我现在查一下。