switch case mit Strings

Kalito

Erfahrenes Mitglied
Hallo,

ich bekomme einen String und möchte darauf ein switch case anwenden. Jedoch wirft mir Eclipse den Fehler "Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted" und die Option "Change project comliance and JRE to 1.7". Ich bin aktuell auf der JRE-Version 1.6. Wenn ich jedoch in die 1. 7 wechsle bekommen ich bei anderen Funktionen eine Exception geworfen.

Bei java.io.* bekomme ich den Fehler: "The import java.io cannot be resolved"
Bei public staic main(...) bekomme ich den Fehler: "Syntax error on token "void", @ expected"
Bei String, try, catch, etc. bekomme ich den Fehler: "Syntax error on tokens, delete these tokens"

Wo liegt hier mein Problem?
Hier noch der Code:
Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import Projects.Test.Testprojekt;

	public static void main(String[] args) throws IOException{

		
		String filename = "testdaten.csv";
		String zeile;
		String[] split = null;
		String currentMethod = "";
		
		//Starten der Anwendung
		Projects.Test.Testprojekt projekt = new Testprojekt();
		projekt.starten();
		
		try 
		{
			FileReader file = new FileReader("/Pfad/zur/Datei/"+filename);
			BufferedReader data = new BufferedReader(file);
			while ((zeile = data.readLine()) != null) {
				split = zeile.split(";");
				for(int i=0; i<split.length; i++) {
					currentMethod = (split[0] != "") ? split[0] : currentMethod;
					switch (currentMethod) {
						case "login": projekt.login(username, password) break;
					}
					
				}
			}
		} 
		catch (FileNotFoundException e) 
		{
			System.out.println("Datei nicht gefunden");
		} 
		catch (IOException e) 
		{
			System.out.println("E/A-Fehler");
		}
		
		//Beenden der Anwendung
		projekt.beenden();
	}

Gruß, Kalito
 

sheel

I love Asm
Hi

Zum import: Das Sauberste wärs, ein neues Projekt (gleich mit 1.7) zu erstellen
und den Code dort reinzukopieren.
Hatte mit Versionsumstellungen in Eclipse auch noch nie Erfolg :rolleyes:

Zum Rest: Kann es sein, dass da irgendwie eine Klasse rund um main herum fehlt :suspekt:
 

Kalito

Erfahrenes Mitglied
Naja, wenn ich ein neues Projekt mit JavaSE 1.7 erstelle, dann steht im Java Build Path hinter der JRE unbounded. Auch so gehen die Fehler nicht weg.

Code:
package Projekt;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
Bei packages kommt der Fehler "The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files".
Bei meinem Klassennamen kommt der Fehler "Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor". Das kommt auch, obwohl ich gesagt habe, dass er den Superkonstruktor verwenden soll.
Bei String[] kommt der Fehler "String cannot be resolved to a type"
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

es reicht nicht, nur die Source-Kompatibilität einzustellen, du musst das JDK für das Projekt ändern.

Entweder global, oder per Projekt wenns vorerst nur das eine sein soll:

Global für alle Projekte im Workspace:
Window -> Preferences
In dem Fenster links im Baum unter Java -> Installed JREs

Wenn das JRE 7 noch nicht drin ist, dieses per Add suchen und in die Liste einfügen. Um dieses als Standard für alle Projekte festzulegen den Haken in der Liste setzen.

Per Projekt:
Rechtsklick auf Projekt -> Build Path -> Configure Build Path

Unter dem Reiter "Libraries" dann das JRE suchen, Rechts auf "edit". Hier dann auf "alternate JRE" und in der Liste das JRE 7 auswählen. Wenn das nicht in der Liste ist, dann rechts daneben auf "Installed JREs..." gehen.

In dem neuen Dialog dann auf "Add" und den Pfad suchen wo du es installiert hast.

Grüße,
BK