NoSuchMethodError bei Implementierung unter Linux

8

Ich habe den folgenden Code, der aus einer Datei liest:

%Vor%

Dies funktioniert wie erwartet, wenn ich auf Tomcat-Server unter Windows bereitstellen. Wenn ich unter Linux dasselbe versuche, werden die Dateien nicht gelesen. Beim Überprüfen der tomcat-Protokolldatei sehe ich:

%Vor%

Der Fehler tritt aufgrund von System.lineSeparator() auf, aber wenn ich das Javadoc überprüfe, heißt es:

  

Gibt die systemabhängige Zeilentrennzeichenfolge zurück. Es kehrt immer zurück   derselbe Wert - der Anfangswert der Systemeigenschaft   line.separator.

     

Auf UNIX-Systemen gibt es "\ n" zurück; auf Microsoft Windows Systemen es   gibt "\ r \ n" zurück.

Kann jemand erklären, warum das nicht funktioniert und wie es behoben wird, damit es auf mehreren Plattformen funktioniert?

    
Sionnach733 07.03.2014, 11:04
quelle

4 Antworten

11

Es scheint, dass Sie nicht die gleiche Version von Java zwischen Linux und Windows verwenden.

Wie Sie im Javadoc sehen können, System.lineSeparator() existiert nicht in Java & lt; 7.

Wenn Sie also das Zeilentrennzeichen auf java & lt; 7, müssen Sie verwenden:

%Vor%     
Florent Bayle 07.03.2014, 11:12
quelle
2

Es scheint, dass Sie verschiedene JDK-Versionen unter Windows und Linux ausführen.

  • Unter Windows ist das JDK 7 mit System .lineSeparator () Methode definiert.
  • Die gleiche Methode existiert in den vorherigen JDK-Versionen nicht (überprüfen Sie System Klasse in Java 6), die auf Ihrer Linux-Box ausgeführt wird.

Verwenden Sie für den abwärtskompatiblen Code System.getProperty("line.separator") .

    
Santosh 07.03.2014 11:14
quelle
1

Wie andere darauf hingewiesen haben, gibt es ein Problem mit den Versionen. Ich würde es wagen zu sagen, dass das bloße Ändern der JVM nicht ausreicht. Ihr Programm könnte beim Start auf die erwartete Version prüfen, um solche Probleme in der Zukunft zu vermeiden :

%Vor%

Sie können dies auch für andere Einstellungen (Gebietsschema ...) tun, aber diese hängen von der Art Ihres Projekts ab. Die Idee ist, dass ein totes Programm besser ist als ein verkrüppeltes (fail fast), eine andere Idee ist, dass man ein Problem ein für alle Mal beheben sollte (Fehler einmal finden). . Hier finden Sie weitere Tipps: Ссылка

    
Christophe Roussy 07.03.2014 12:14
quelle
0

System.lineSeparator() wird in Java 7 eingefügt. Es scheint also, dass Sie eine frühere Version auf Ihrem Linux-Rechner verwenden. Sie können System.getProperty("line.separator"); verwenden, um es zu bekommen oder Ihre Java-Version auf Ihrem Linux-Rechner zu aktualisieren.

    
Sanjeev 07.03.2014 11:19
quelle

Tags und Links