2017-06-13 97 views
0

我試圖讓Apache的FTPSClient實例運行(在這裏看到: https://svn.apache.org/repos/asf/commons/proper/net/tags/NET_2_2/src/main/java/examples/ftp/FTPSExample.javaNoSuchFieldError _hostname_ - FTPSClient與Java解釋器

在Eclipse中,這個例子的代碼工作正常,我可以在我的文件上傳到服務器。當我嘗試在Interprete中編譯我的代碼時,它也可以運行普通的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的原始示例。

謝謝你,路易斯

回答

0

Probabry,您使用的共享網絡JAR或SocketClient類的老正矢量。自從Commons Net版本3.4以來,現場變量_hostname_已被引入。另見this history。該字段在抽象類SocketClient中定義,並由擴展類FTPSClient使用。如果使用新版本FTPSClient和舊版本SocketClient,則引發java.lang.NoSuchFieldError: _hostname_

+0

好的,那我該如何解決?在我的Classpath中只有最新的commons-net-3.6.jar。我重新編譯了一切,但錯誤仍然存​​在。 – louis12356

+0

在WEB-INF/classes/org/apache/commons/net /中有'SocketClient.class'嗎?如果是,請將其備份(並刪除)到其他位置。如果不是,請嘗試替換從[官方網站](https://commons.apache.org/proper/commons-net/download_net.cgi)下載的jar文件。 –

+0

所以,我做了你所說的,刪除並備份了SocketClient.class並重新編譯了我的FTP客戶端類和我的EBUS程序。當我啓動我的EBUS程序時,發生相同的錯誤。我現在能做什麼 ? – louis12356