2017-06-13 5 views
0

Ich versuche, das FTPSClient Beispiel von Apache zum Laufen zu bringen (siehe hier: https://svn.apache.org/repos/asf/commons/proper/net/tags/NET_2_2/src/main/java/examples/ftp/FTPSExample.java)NoSuchFieldError _hostname_ - FTPSClient Java mit Interpreter

In Eclipse dieses Beispiel Code funktioniert gut und ich kann meine Dateien auf einen Server hochladen. Wenn ich versuche, meinen Code innerhalb des Interpreten zu kompilieren, der auch normalen Java-Quellcode ausführen kann, funktioniert er immer noch. Aber wenn ich mein kompiliertes Programm starte, erhalte ich die folgenden Fehler:

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) 

Der letzte "Satz" ist Klasse mit meiner selbst benannten Methode. In Zeile 93, ich versuche nur zu einem Server zu verbinden:

this.ftps.connect(this.server); 

Eclipse und mein Dolmetscher sind beide die gleiche Classpath nehmen, wo meine commons.net.jar platziert ist (3.6). Also weiß ich wirklich nicht, warum dieser Fehler auftritt. Wenn Sie die ganze Klasse sehen müssen, kann ich sie hier posten. Aber ich habe keine Änderungen am ursprünglichen Beispiel von Apache vorgenommen.

Danke, Louis

Antwort

0

Probabry, Sie eine alte versin of Commons Net Glas oder SocketClient Klasse verwenden. Die Feldvariable _hostname_ wurde seit Commons Net Version 3.4 eingeführt. Siehe auch this history. Das Feld ist in der abstrakten Klasse SocketClient definiert und wird von einer erweiterten Klasse FTPSClient verwendet. Wenn sowohl die neue Version FTPSClient als auch die alte Version SocketClient verwendet wird, wird java.lang.NoSuchFieldError: _hostname_ ausgelöst.

+0

Okay, wie kann ich das beheben? In meinem Classpath gibt es nur das neueste commons-net-3.6.jar. Ich habe alles neu kompiliert, aber der Fehler bleibt bestehen. – louis12356

+0

Gibt es 'SocketClient.class' in' WEB-INF/classes/org/apache/commons/net/'? Wenn ja, sichern Sie sie bitte (und entfernen Sie sie) an einen anderen Ort. Wenn nein, versuchen Sie bitte, die JAR-Datei zu ersetzen, die von [offizielle Seite] heruntergeladen wurde (https://commons.apache.org/proper/commons-net/download_net.cgi). –

+0

Also, ich habe getan, was Sie gesagt haben, entfernt und backuped die SocketClient.class und kompilierte meine FTP-Client-Klasse und mein EBUS-Programm. Wenn ich mein EBUS-Programm starte, tritt derselbe Fehler auf. Was kann ich jetzt machen ? – louis12356

Verwandte Themen