# java.lang.UnsupportedClassVersionError:



## y0dA (19. Februar 2008)

Komplette Fehlermeldung welche ich im Editor (myEclipse) bekomme:

```
Folgende Ausnahme ist aufgetreten - java.lang.UnsupportedClassVersionError: Bad version number in .class file
```

Und zwar bekomme ich diese Meldung ganz oben in den jeweiligen Klassen (es sind nur 2).

Das einzige was ich getan habe ist, dass ich das *Compiler compliance Level* auf *6* gestellt habe - ich möchte auf Java 1.6 umsteigen bei meinen Projekten.

Weiters habe ich diesbezüglich auch unter *Windows/Preferences/Java/Installed JREs* eine neue JRE angegeben und aktiviert (muss ich hier den JRE Ordner des JDK angeben oder eh das passende JRE zu dem JDK?).

Bei 2 Projekten funktioniert alles reibungslos, nur bei den einem bekomme ich diese Exceptions in 2 Klassen. Hierbei habe ich dann alle Methoden in dieser Klasse auskommentiert und schrittweise hinzugefügt, bei jener Stelle bekomme ich dann die Ausnahme:

```
/**
	 * set and instantiate external parser <code>className</code>
	 * @param c class name which implements <code>{@link ITrackParser}</code>
	 * @throws InputOutputException e
	 */

public void setExternalParser(final Class c) throws InputOutputException {
		try {
			this.setItrackParser((ITrackParser) (c.newInstance()));
		} catch (InstantiationException e) {
			throw new InputOutputException("class: " + c + " instantiation fails ", e);
		} catch (IllegalAccessException e) {
			throw new InputOutputException("class: " + c + " is not accessible ", e);
		}
	}
```
Und zwar wegen *InputOutputException *, im speziellen hat er Probleme mit dem Javadoc *@throws InputOutputException e*
Also wenn dies weglasse funktioniert alles und ich bekomme keine Ausnahme - kann es wohl nicht sein, dass ich kein @throws mehr schreiben darf?

**EDIT**
Also dieses Problem habe ich nur bei Exceptions die ich selber geschrieben habe zB:

```
public class InputOutputException extends RuntimeException {

	//------------------------------------------------------------------------------------------------------------------
	// FIELDS
	//------------------------------------------------------------------------------------------------------------------
	
	/** serial version uid */
	private static final long serialVersionUID = 8547537616722700735L;
	
	//------------------------------------------------------------------------------------------------------------------
	// CONSTRUCTOR
	//------------------------------------------------------------------------------------------------------------------

	/**
     * empty constructor
     */
    public InputOutputException() {
        super();
    }

    /**
     * constructor for using fields
     * @param message message
     * @param cause cause
     */
    public InputOutputException(final String message, final Throwable cause) {
        super(message, cause);
    }

    /**
     * constructor for using fields
     * @param message message
     */
    public InputOutputException(final String message) {
        super(message);
    }

    /**
     * constructor for using fields
     * @param cause cause
     */
    public InputOutputException(final Throwable cause) {
        super(cause);
    }
```


----------



## Thomas Darimont (19. Februar 2008)

Hallo,

wird in den Launch Configuration (unter Run...) auch ein Java 6 JRE verwendet?

Gruß Tom


----------



## y0dA (19. Februar 2008)

Also unter Run/Run... finde ich nichts mit dem Namen "Launch Configuration", jedoch eben dort kann ich ja auf Java Application klicken und New_Configuration5 ist für mein Projekt (wo die Probleme auftreten) und dort steht unter JRE --> Project JRE(jre1.6.0_04. Demnach dürfte das passen.

Mittlerweile ist mir aufgefallen dass diese Exception erst auftritt wenn ich bei dieser @throws Klausel neben der Exception noch einen Buchstaben angebe:

```
@throws InputOutputException e
```
geht nicht


```
@throws InputOutputException
```
funktioniert, nur dass das Checkstyle schreit dass die @throws Klausel fehlt.

Kann es sein dass man unter Java 1.6 einfach kein throws mehr im Methodenkopf angeben darf wenn es sich um eine RuntimeException bzw einer Spezialisierung davon handelt?


----------



## y0dA (19. Februar 2008)

Es liegt an Checkstyle, sprich wenn ich Checkstyle deaktiviere funktioniert alles - kann es sein, dass meine Checkstyle Version zu alt ist? Ich hab auch das Checkstylefile von SUN probiert (anstatt meinem eigenen) und bekomme dann die Exception.


----------



## y0dA (20. Februar 2008)

Hat solche Probleme hier noch niemand gehabt?

Habe nun alle meine JREs und JDKs deinstalliert und nur das aktuelle JDK installliert. Weiters Eclipse die JDK JRE als JRE angegeben.

Nun liegt das Problem in folgender Situation nach wie vor vor:
Wenn ich ein @throws IrgendeineException *e* schreibe, dann bekomme ich die Fehlermeldung lasse ich das Kommentar (e) zu dem throws weg funktioniert alles.

Also irgendjemanden bekannt? Könnt ihr den Fehler reproduzieren?


----------



## zeja (20. Februar 2008)

Erstell doch mal ein minimales Testbeispiel (Sprich eine Klasse) mit der ich das Testen könnte und von der du weisst dass es bei dir nicht geht. Wenn ich mir das auch deinen Daten hier selbst zusammenbaue hätte das wenig Sinn, weil ich es eventuell anders machen würde als du


----------



## y0dA (21. Februar 2008)

zeja hat gesagt.:


> Erstell doch mal ein minimales Testbeispiel (Sprich eine Klasse) mit der ich das Testen könnte und von der du weisst dass es bei dir nicht geht. Wenn ich mir das auch deinen Daten hier selbst zusammenbaue hätte das wenig Sinn, weil ich es eventuell anders machen würde als du



Ok.
Hier die Custom Exception:

```
public class TestException extends RuntimeException {

	public TestException() {
		// TODO Auto-generated constructor stub
	}

	public TestException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	public TestException(Throwable cause) {
		super(cause);
		// TODO Auto-generated constructor stub
	}

	public TestException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

}
```

Und hier die Klasse wo @throws die Exception in Zeile 0 im Eclipse Editor anzeigt:

```
public class TestClass {

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

	}

}
```


----------

