Exception Handling - Wie vorgehen

y0dA

Erfahrenes Mitglied
Hallo!
Es geht um folgende Methode:
Code:
	/**
	 * load an external jar libary to get a class which implements <code>#{@link ITrackParser}</code>
	 */
	public void loadExternalLibary() {
		URL jarURL = null;
		try {
			jarURL = new File(this.path + this.jar).toURL();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		
		if (classLoader != null && (classLoader instanceof URLClassLoader)) {
			URLClassLoader urlClassLoader = (URLClassLoader) classLoader;
			Method addURL = null;
			try {
				addURL = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
			} catch (SecurityException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			addURL.setAccessible(true);
			try {
				addURL.invoke(urlClassLoader, new Object[]{jarURL});
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			Class c = null;
			try {
				c = classLoader.loadClass(this.className);
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			if (!ITrackParser.class.isAssignableFrom(c)) {					
				/* class does not implement needed interface */
				try {
					throw new Exception("external class " + this.className + " does not implement needed "
							+ ITrackParser.class);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
			/* instantiate this track parser variable */
			try {
				this.itrackParser = (ITrackParser) c.newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    } 
	}

Im Detail interessiert mich wie ich hierbei vorgehen soll:
Code:
if (!ITrackParser.class.isAssignableFrom(c)) {					
				/* class does not implement needed interface */
				try {
					throw new Exception("external class " + this.className + " does not implement needed "
							+ ITrackParser.class);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

Sprich was für eine Exception soll ich hierbei werfen bzw gibt es eine oder muss ich eine eigene schreiben?

mfg
 
Nimm halt einfach ne allgemeine wie:
Code:
try{

}
catch(Exception ex){
ex.printStackTrace();
.
.
.
}
 
Nimm halt einfach ne allgemeine wie:
Code:
try{

}
catch(Exception ex){
ex.printStackTrace();
.
.
.
}

Hmm?
Somit kann ich zumindest alle 8-9 Exception mit einem Schlag fangen - behandeln tu ich sie eh nicht.

Aber meine Frage zielte eher auf diese Stelle ab:
Code:
if (!ITrackParser.class.isAssignableFrom(c)) {					
					/* class does not implement needed interface */
					throw new Exception("external class " + this.className + " does not implement needed "
							+ ITrackParser.class);
				}
Sprich ob ich hier throw new Exception schreiben soll oder ob eine eine spezialisierte Exception hierfür gibt.
 
Mit dem printStackTrace() wird dir bei einer Exception angezeigt um was für eine es sich handelt. Lass doch mal absichtlich eine Exception auftreten und schau was für eine das war.
Oder: Schau in die API was es für Exception in der Klasse/Methode oder was auch immer gibt
 
Mit dem printStackTrace() wird dir bei einer Exception angezeigt um was für eine es sich handelt. Lass doch mal absichtlich eine Exception auftreten und schau was für eine das war.
Oder: Schau in die API was es für Exception in der Klasse/Methode oder was auch immer gibt

Nochmal, ich werfe ich selbst eine Exception, weil die Klasse nicht das gewünschte Interface implementiert!
 
Schreib dir doch eine eigene Exception-Klasse:

class ITrackParserNotImplemented extends Exception {
...
}

Dann kannst du die auch mit throw werfen.
 
Zurück