【问题标题】:NoSuchFieldError _hostname_ - FTPSClient Java with InterpreterNoSuchFieldError _hostname_ - 带有解释器的 FTPSClient Java
【发布时间】:2017-06-19 12:46:18
【问题描述】:

我正在尝试从 Apache 运行 FTPSClient 示例(请参见此处: https://svn.apache.org/repos/asf/commons/proper/net/tags/NET_2_2/src/main/java/examples/ftp/FTPSExample.java)

在 Eclipse 中,此示例代码运行良好,我可以将文件上传到服务器。当我尝试在 Interprete,r 中编译我的代码时,它也可以运行普通的 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 的原始示例进行任何更改。

谢谢你,路易斯

【问题讨论】:

    标签: java eclipse ftp interpreter


    【解决方案1】:

    Probabry,您正在使用 Commons Net jar 或 SocketClient 类的旧版本。自 Commons Net 3.4 版起引入了字段变量_hostname_。另见this history。该字段在抽象类SocketClient 中定义,并由扩展类FTPSClient 使用。如果FTPSClient的新版本和SocketClient的旧版本都被使用,则java.lang.NoSuchFieldError: _hostname_被抛出。

    【讨论】:

    • 好的,那我该如何解决呢?在我的 Classpath 中只有最新的 commons-net-3.6.jar。我重新编译了所有内容,但错误仍然存​​在。
    • WEB-INF/classes/org/apache/commons/net/ 中有 SocketClient.class 吗?如果是,请将其备份(并删除)到其他位置。如果不是,请尝试替换从official site下载的jar文件。
    • 所以,我照你说的做了,删除并备份了 SocketClient.class 并重新编译了我的 FTP 客户端类和我的 EBUS 程序。当我启动我的 EBUS 程序时,会发生同样的错误。我现在能做什么?
    • 更新:我无法编译我的 Eclipse 类,因为缺少 SocketClient.class - 现在怎么办?
    • 好的,我想我发现了错误:我的类路径中有另一个 .jar 文件,它有一个 SocketClient.class(可能是旧版本)。我现在检查一下。
    猜你喜欢
    • 2022-01-22
    • 2019-09-06
    • 2017-08-18
    • 1970-01-01
    • 2021-05-03
    • 2016-01-12
    • 2010-10-24
    • 2022-06-07
    相关资源
    最近更新 更多