greenmoon
Anmeldungsdatum: 10. März 2010
Beiträge: 269
|
Hallo zusammen, ich habe wie im Wiki beschrieben Java7 mit folgenden befehl | sudo apt-get install openjdk-7-jdk openjdk-7-source openjdk-7-demo openjdk-7-doc openjdk-7-jre-headless openjdk-7-jre-lib
|
installiert. Laut Terminal ist auch die Version 1.7 aktiviert | $ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu3)
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)
|
Wenn ich jetzt aber ein Programm kompilieren will, welches auf dem Uni-Rechner mit Java7 funktioniert, erhalte ich hier 40 Fehlermeldungen, welche alle auch irgendwie dämlich (und falsch) sind. Das sind dann zum Beispiel:
./file.java:113: 'catch' without 'try'
catch(IOException ioe){
^
./file.java:113: ')' expected
catch(IOException ioe){
^
./file.java:117: illegal start of expression
public void laden() {
^
./file.java:154: reached end of file while parsing
}
^
./file.java:7: package java.nio.file does not exist
import java.nio.
^
Also wie gesagt, auf dem Uni-Rechner funktioniert das einwandfrei, daher können die Fehler ja eigentlich gar nicht wirklich existieren. Daher glaube ich, dass ich irgendwie den Wechsel von Java6 auf 7 vergeigt habe. Zudem zeigt mir die Seite hier http://java.com/de/download/installed.jsp?jre_version=1.6.0_24&vendor=Sun+Microsystems+Inc.&os=Linux&os_version=3.2.0-24-generic auch an, dass ich die Java-Version: Version 6 Update 24 verwende. Kann mir jemand weiterhelfen?
|
fckawe
Anmeldungsdatum: 23. April 2011
Beiträge: 509
Wohnort: Freiburg im Breisgau
|
Hallo, greenmoon schrieb: Zudem zeigt mir die Seite hier http://java.com/de/download/installed.jsp?jre_version=1.6.0_24&vendor=Sun+Microsystems+Inc.&os=Linux&os_version=3.2.0-24-generic auch an, dass ich die Java-Version: Version 6 Update 24 verwende.
Dann zeigt wohl der Alternatives-Eintrag noch auf die 6er-Version (Stichwort update-alternatives ). Das interessiert ja aber (für dein genanntes Problem) nicht.
Also wie gesagt, auf dem Uni-Rechner funktioniert das einwandfrei, daher können die Fehler ja eigentlich gar nicht wirklich existieren.
Mich lässt die Meldung reached end of file while parsing aufhorchen. Was hat die Datei denn für ein Encoding? Läuft dein Uni-Rechner mit Windows? Nimm doch mal eine kleine Java-Klasse heraus, die für sich selbst kompilierbar ist und schreib die mal in eine neue Datei (von Hand). Versuch dann mal die zu kompilieren.
sudo apt-get install openjdk-7-jdk openjdk-7-source openjdk-7-demo openjdk-7-doc openjdk-7-jre-headless openjdk-7-jre-lib
Ich würde, aufgrund verschiedener Probleme, eher zur Oracle-Version greifen. Wird dich bei deinen Programmierübungen sicherlich normalerweise nicht betreffen... Trotzdem... Ggfs. wäre es doch mal noch interessant, wenn du eine Quelldatei hier als Anhang hochladen könntest. Vielleicht lässt sich das ja dann doch etwas besser klären... Gruß, Gerald
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Unirechner: Java 7 aber auch Windows 7? CR/LF-Problem vielleicht? edit: 2. Sieger.
|
fckawe
Anmeldungsdatum: 23. April 2011
Beiträge: 509
Wohnort: Freiburg im Breisgau
|
user unknown schrieb: CR/LF-Problem vielleicht?
Wobei eine Datei, die ich hier mit VIM auf DOS-Format umstelle, sich ohne Probleme kompilieren lässt...
edit: 2. Sieger.
Ich kann ja ruhig auch mal Glück haben... 😉 Gruß, Gerald
|
greenmoon
(Themenstarter)
Anmeldungsdatum: 10. März 2010
Beiträge: 269
|
Nein, auf der Uni läuft auch ein Linux, ich weiß grade aber nicht genau welches. Meine echte Quelldatei will ich eigentlich nicht hochladen, da ein Freund damit schonmal negative Erfahrungen gemacht hat (Er hatte ein kleines Problem, hat seinen Quellcode in einem Forum hochgeladen und dann wurde ihm nachher unterstellt, dass er seine Lösung einfach da abgeschrieben hätte). Daher habe ich mir gerade ein kleines Programm geschrieben, wo ich nur eine Datei in.txt einlese und in einer neuen Datei ausgebe, und hoffe, dass, wenn das läuft, auch mein Original lauffähig sein sollte. Zudem sind die Fehlermeldungen eigentlich dieselben. Wieder das selbe Spiel, auf dem Unirechner läuft es durch, hier erhalte ich folgende Fehlermeldungen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | javac bla.java
bla.java:9: '{' expected
try(BufferedReader br = Files.newBufferedReader(Paths.get("in.txt"),
^
bla.java:9: ')' expected
try(BufferedReader br = Files.newBufferedReader(Paths.get("in.txt"),
^
bla.java:12: ';' expected
Charset.defaultCharset()))
^
bla.java:20: 'catch' without 'try'
catch(IOException e){
^
bla.java:20: ')' expected
catch(IOException e){
^
bla.java:20: not a statement
catch(IOException e){
^
bla.java:20: ';' expected
catch(IOException e){
^
bla.java:9: 'try' without 'catch' or 'finally'
try(BufferedReader br = Files.newBufferedReader(Paths.get("in.txt"),
^
bla.java:23: reached end of file while parsing
}
^
9 errors
|
Vielleicht hilft euch das ja weiter
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2123
Wohnort: Gelsenkirchen
|
Ist das wirklich richtig, dass hinter dem try eine runde Klammer folgt? Ich kenn's eigentlich nur so, dass da eine geschweifte hingehört. Bin aber noch ziemlich am Anfang mit meinen Java-Kenntnissen. Vielleicht ist das ja eine spezielle (Java 7) Syntax? Wenn du nicht sagen würdest, dass es auf den Uni-Rechnern exakt in der selben Form funktioniert, dann würde ich dann doch eher dazu tendieren, dass du Murks eingegeben hast und der Compiler (bzw Parser) schon ganz recht hat mit seinem Gemecker. 😉
|
greenmoon
(Themenstarter)
Anmeldungsdatum: 10. März 2010
Beiträge: 269
|
snafu1 schrieb: Ist das wirklich richtig, dass hinter dem try eine runde Klammer folgt? Ich kenn's eigentlich nur so, dass da eine geschweifte hingehört. Bin aber noch ziemlich am Anfang mit meinen Java-Kenntnissen. Vielleicht ist das ja eine spezielle (Java 7) Syntax? Wenn du nicht sagen würdest, dass es auf den Uni-Rechnern exakt in der selben Form funktioniert, dann würde ich dann doch eher dazu tendieren, dass du Murks eingegeben hast und der Compiler (bzw Parser) schon ganz recht hat mit seinem Gemecker. 😉
Nein, das stimmt schon. Das ist ein try Block mit automatischem Ressourcen-Management (ARM) bewirkt, dass die Streams automatisch geschlossen werden, wenn der try Block vorbei ist, also egal ob er normal durchlief oder durch eine Exception unterbrochen wurde. Genau wegen dem Block brauche ich eigentlich auch Java7 ☺ Edit: ich habe oben eigentlich den Quellcode für dieses Testprogramm angehangen, bin aber verwundert, weil der zumindest bei mir da nirgends auftaucht. Da er eh kurz ist hier einfach mal direkt 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | import java.io.*;
import java.nio.charset.*;
import java.nio.file.*;
public class bla {
public static void main(String args[]){
String newline = System.getProperty("line.separator");
try(BufferedReader br = Files.newBufferedReader(Paths.get("in.txt"),
Charset.defaultCharset());
BufferedWriter bw = Files.newBufferedWriter(Paths.get("out.txt"),
Charset.defaultCharset()))
{
String zeile = br.readLine();
while(zeile != null){
bw.write(zeile + newline);
zeile = br.readLine();
}
}
catch(IOException e){
}
}
}
|
|
fckawe
Anmeldungsdatum: 23. April 2011
Beiträge: 509
Wohnort: Freiburg im Breisgau
|
Hmm, bei mir lässt sich deine Testklasse sowohl mit OpenJDK als auch mit dem JDK von Oracle kompilieren und ausführen. Probier's doch vielleicht wirklich mal noch mit der Oracle-Version. Bin zwar ehrlich gesagt nicht sehr optimistisch, dass das was ändert... aber einen Versuch ist es wert. Brauchst sie ja nur zu herunterladen und zu entpacken - und dann rufst du eben javac unter Angabe des kompletten Pfads auf... Ansonsten bin ich ratlos... Gruß, Gerald BTW... greenmoon schrieb: Nein, auf der Uni läuft auch ein Linux, ich weiß grade aber nicht genau welches. [...] Daher habe ich mir gerade ein kleines Programm geschrieben, [...] [...] Wieder das selbe Spiel, auf dem Unirechner läuft es durch, [...]
Wenn du die Klasse gerade erst geschrieben hast und sagen kannst, dass es auf dem Uni-Rechner läuft, dann kannst du doch auch nachsehen, welches Linux läuft... Interessanter wäre allerdings vielleicht auch die Java-Version. Gruß, Gerald
|
greenmoon
(Themenstarter)
Anmeldungsdatum: 10. März 2010
Beiträge: 269
|
irgendwa mach ich da wohl falsch :~$ Downloads/jdk-7u4-linux-x64/usr/java/jdk1.7.0_04/bin/javac workspace/test7/src/bla.java
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
fckawe schrieb: Wenn du die Klasse gerade erst geschrieben hast und sagen kannst, dass es auf dem Uni-Rechner läuft, dann kannst du doch auch nachsehen, welches Linux läuft... Interessanter wäre allerdings vielleicht auch die Java-Version. Gruß, Gerald
Stimmt das kann ich ☺ | cat /etc/issue
Welcome to openSUSE 11.3 "Teal" - Kernel \r (\l).
java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | /opt/jdk1.6/bin/javac Bla.java
Bla.java:10: '{' expected
try (
^
Bla.java:11: ')' expected
BufferedReader br = Files.newBufferedReader (Paths.get ("Bla.java"), Charset.defaultCharset ());
^
Bla.java:12: ';' expected
BufferedWriter bw = Files.newBufferedWriter (Paths.get ("out.txt"), Charset.defaultCharset ()))
^
Bla.java:20: 'catch' without 'try'
catch (IOException e) {
^
Bla.java:20: ')' expected
catch (IOException e) {
^
Bla.java:20: not a statement
catch (IOException e) {
^
Bla.java:20: ';' expected
catch (IOException e) {
^
Bla.java:10: 'try' without 'catch' or 'finally'
try (
^
Bla.java:24: reached end of file while parsing
}
^
9 errors
|
Du kannst mit dem Aufruf von java nicht prüfen, welcher Compiler aufgerufen wird, wenn Du javac - den Javacompiler aufrufst. Offenbar rufst Du den 1.6er Compiler auf. Die Linux/Unix-Tools, um zu testen welches Programm man verwendet, sind:
| which javac
whereis javac
|
Das Javamittel:
| asux:~/proj/mini/forum > javac -version
javac 1.7.0_03
asux:~/proj/mini/forum > /opt/jdk1.6/bin/javac -version
javac 1.6.0_26
|
Außerdem schreibt man bei Java Klassennamen groß, und Exceptions greift man nicht, um sie stillschweigend zu verschlucken. Das ist mit Abstand das allerdümmste, was man mit einer Exception machen kann.
Ist für Ad-hoc-code ein guter Kompromiß zwischen wenig tippen und viel sehen.
|
greenmoon
(Themenstarter)
Anmeldungsdatum: 10. März 2010
Beiträge: 269
|
user unknown schrieb: Du kannst mit dem Aufruf von java nicht prüfen, welcher Compiler aufgerufen wird, wenn Du javac - den Javacompiler aufrufst. Offenbar rufst Du den 1.6er Compiler auf.
In der Tat, ich ging davon aus, das auch der compiler dann 1.7 ist . Bleibt jetzt nur noch die Frage, wie man den Compiler umstellt javac -version
javac 1.6.0_24
Außerdem schreibt man bei Java Klassennamen groß, und Exceptions greift man nicht, um sie stillschweigend zu verschlucken. Das ist mit Abstand das allerdümmste, was man mit einer Exception machen kann.
Ist für Ad-hoc-code ein guter Kompromiß zwischen wenig tippen und viel sehen.
Auch damit hast du natürlich recht, aber, wie gesagt, dass war nur ein Demonstrationsprogramm und da war mir das ehrlich gesagt echt egal.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Ich habe mein Java nicht über die Paketverwaltung installiert, da ich mehrere Versionen parallel haben will, und schon hatte, inkl. privater Lösung für das Umschalten, bevor es bei Linux/Ubuntu dafür eine gab: das alternatives-System. update-java-alternatives sollte helfen beim Umstellen - wieso Deine Installation nur die Runtime, nicht aber den Compiler aktualisiert hat weiß ich nicht. Ich habe aber auch ein 32-bit System, und weiß nicht genau, was Ubuntu da tut.
|
fckawe
Anmeldungsdatum: 23. April 2011
Beiträge: 509
Wohnort: Freiburg im Breisgau
|
user unknown schrieb: Du kannst mit dem Aufruf von java nicht prüfen, welcher Compiler aufgerufen wird, wenn Du javac - den Javacompiler aufrufst.
Offenbar rufst Du den 1.6er Compiler auf.
Mist, ja. Sowas sollte einem mal gleich am Ursprungs-Post auffallen... ☺ und schrieb auch: wieso Deine Installation nur die Runtime, nicht aber den Compiler aktualisiert hat weiß ich nicht.
Vielleicht steht der javac -Eintrag im Alternativen-System nicht auf auto ?! Das würde dann aber bedeuten, dass du (@greemoon) da schon (irgendwann) einmal aktiv warst und manuell der Java6-Compiler ausgewählt hast. Gruß, Gerald
|
greenmoon
(Themenstarter)
Anmeldungsdatum: 10. März 2010
Beiträge: 269
|
Ok, vielen Dank. Ich wüsste zwar nicht, wann ich den java6-Compiler ausgewhält haben sollte, aber jetzt läufts.
|