selbst definierte exception abfangen funzt nicht

Status
Nicht offen für weitere Antworten.

rambozola

Bekanntes Mitglied
hi leute,

hier ein ausschnitt aus meinem code:

Code:
try{
	tempTagContent = tempMP3File.getAlbum();
}
catch(FrameDamagedException fde){
	String album = "null";
	System.out.println("album null");
}

die Methode MP3File.getAlbum() wirft im Fehlerfall die FrameDamagedException.
(Sie leitet sie aus TextFrame.read() und TextFrameEncoding.read() weiter --> siehe Stack unten).

trotzdem wird mein string "album null" niemals angezeigt und das abfangen klappt nicht , obwohl im eclipse genau an dieser stelle die FrameDamagedException auftritt

de.vdheide.mp3.FrameDamagedException
at de.vdheide.mp3.TextFrame.read(TextFrame.java:114)
at de.vdheide.mp3.TextFrameEncoding.read(TextFrameEncoding.java:63)
at de.vdheide.mp3.MP3File.getAlbum(MP3File.java:384)
at Medienverwaltungsablaufsteuerung.Steuerklasse.mehrereEintraegeInDB(Steuerklasse.java:1564)
at Medienverwaltungsablaufsteuerung.Steuerklasse.starteGewaehltenUnterpunkt(Steuerklasse.java:428)
at GUI.Menue.actionPerformed(Menue.java:110)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
................................................................................

Woran kann das liegen?

Ich konnte bisher noch jede Exception abfangen aber hier klappt es nicht.
 
die methoden mp3.TextFrame.read(),TextFrameEncoding.read() und MP3File.getAlbum() haben throws FrameDamagedException nach der methodensignatur stehen.

also zB in MP3File :
public TagContent getAlbum()
throws FrameDamagedException
{ ...}

in meiner methode in der ich auf getAlbumzugreife steht kein throws mehr..dort versuche ich ja die exception abzufangen...
 
Kann es sein, dass TextFrame.read() kein "throws" hat und dass FrameDamagedException von RuntimeException abgeleitet ist?
 
leider nicht.
Code:
//in class textframe
public static TagContent read(boolean encoding, ID3v2 id3v2, String type)
        throws FrameDamagedException
    {
        TagContent ret = new TagContent();
        try
        {
            byte v2cont[] = ((ID3v2Frame)id3v2.getFrame(type).elementAt(0)).getContent();
            Parser parse = new Parser(v2cont, encoding);
            try
            {
                ret.setContent(parse.parseText());
            }
            catch(ParseException e)
            {
                throw new FrameDamagedException();
            }
        }
        catch(ID3v2Exception id3v2exception) { }
        return ret;
    }

package de.vdheide.mp3;

/**
 * Thrown when a frame is damaged (e.g. too short)
 */
public class FrameDamagedException extends Exception {
}

auch die ParseException ist von Exception abgeleitet

package de.vdheide.mp3;

/**
 * Thrown when an error in Parser occurs
 */
public class ParseException extends Exception {
}
dbac hat code tags eingefuegt
 
mhm seh ich das richtig, dass dir der Stack ausgegeben wird, wenn du ihn im catch Block schreibst, die System.out.println ausgabe aber nciht ?
 
ich hab auch kA woran das liegen könnte aber die variable
Code:
 String album = "null";
macht keinen sinn

sie wird nirgends benutzt und kann auch nicht von woanders benutzt werden

versuch doch mal:
Code:
   { 
e.printStackTrace();
                throw new FrameDamagedException(); 
            }
ob die exception wirklich dort geworfen wird...
 
wenn du mit einer IDE arbeitest nutze mal den debugger. Wann wird wo die Exception geworfen, wo landet er dann und so weiter
 
@Solour

ja die Stringvariable album hab ich nun auch außerhalb von try-catch definiert...

mich verblüfft es trotzdem das ich die methoden die die exceptions werfen nicht catchen kann...das gibts doch gar nicht...
 
Code:
try{
   tempTagContent = tempMP3File.getAlbum();
}
catch(FrameDamagedException fde){
   String album = "null";
   System.out.println("album null");
}
es kann eigentlich nur daran liegen, dass INNERHALB von getAlbum die Exception verschluckt wird?

durch ein "zu grosses" catch?
 
was bedeutet ein zu grosses catch?

hier die methode:

hat mein fehler evtl damit etwas zu tun,dass um meine inneren FrameDamagedExceptions-Catch-Blöcke noch der äußere catch-block ist der andere exceptions abfängt?

die println´s werden bei ausführen des programms nämlich auch nicht angezeigt

sorry aber der code ist ziemlich lang und die methode geht unten eig sogar noch weiter.

Code:
public void mehrereEintraegeInDB() {
				//eintrag in tabelle datentraeger
				
				nurEinEintragInDbEintragen();
				
				checkenObEingelesenerDatentraegerInDBUndNrLesen(); //muss gemacht werden damit nrDesMediums aus DB gelesen wird
				
				//System.out.println("nr-medium = "+medienErkennung.tempDatenTraeger.nrDesMediums);
				
				//einträge in tabelle datei
				//String dateiQuery = "";
				String dateiEndung = "";
								
				Vector v = medienErkennung.tempDatenTraeger.mp3sAufMedium;
				MySQLVerwaltung mp3MySQL =  new MySQLVerwaltung(url,user,password,"");
				
				for (int i = 0; i < v.size(); i++) {
					
					//dateiendung ermitteln
					StringTokenizer st = new StringTokenizer(((File)v.elementAt(i)).getName(),".");
					do{dateiEndung = st.nextElement().toString().toLowerCase();
						
					}while(st.hasMoreElements());
					
					String dateTime = aenderungsDatumBestimmen(((File)v.elementAt(i)));
					String verzeichnisAufMedium = verzeichnisAufMediumBestimmen(((File)v.elementAt(i)));
					
					// ein "\" im verzeichnisname führt zu syntaxfehler im mysql
					//deswegen noch ein "\"hinzufügen
					
					verzeichnisAufMedium = verzeichnisAufMediumMitUmgedrehtenBackSlash(verzeichnisAufMedium);
					verzeichnisAufMedium = this.kommasInDateiNameEntfernen(verzeichnisAufMedium);
					verzeichnisAufMedium = this.hochKommasInDateiNameEntfernen(verzeichnisAufMedium);
					
					//int dateiGroesse = ((int)((File)v.elementAt(i)).length())/(1024*1024);
					double dateiGroesseDouble = Math.rint( ((double)((File)v.elementAt(i)).length()/(1024*1024)) * 100 ) / 100.;    
					float dateiGroesseFloat = (float)dateiGroesseDouble;
					//System.out.println("gefundene dateiGroesse für datei "+((File)v.elementAt(i)).getName()
							//+" = " +dateiGroesseFloat);
					//bei dateiname kommas entfernen da sonst mysql-syntax nicht stimmt
					String nameOhneKommata = "";
					if(((File)v.elementAt(i)).getName().indexOf(",")!= -1){
						//System.out.println("gefundener name mit komma = "+((File)v.elementAt(i)).getName());
					nameOhneKommata = kommasInDateiNameEntfernen(((File)v.elementAt(i)).getName());
					}
										
					if(((File)v.elementAt(i)).getName().indexOf("'")!= -1){
						//System.out.println("gefundener name mit hochkomma = "+((File)v.elementAt(i)).getName());
					nameOhneKommata = hochKommasInDateiNameEntfernen(((File)v.elementAt(i)).getName());
					}
					else{
						nameOhneKommata = ((File)v.elementAt(i)).getName();
					}
					
					mp3MySQL.anfrageString = "insert into DATEI values(null,'"+dateiEndung+"'," +
									dateiGroesseFloat+",'"+nameOhneKommata+"'," +
									dateTime+",'"+verzeichnisAufMedium+"',"+medienErkennung.tempDatenTraeger.nrDesMediums+");";
					
					//System.out.println(dateiQuery);
					//dateien einzeln eintragen 
					try {
					 	 mp3MySQL.sqlAnfrageAnDBSchicken();
					 	 
					} catch (SQLException e) {
						
						//System.out.println(e.toString());
					}
					
					//einträge in tabelle mp3File
					int dateinr = -1; //ist der fremdschlüssel in der tabelle mp3file von tabelle datei
					try {
						System.out.println("vor try fs dateinr holen");
						//fs dateinr holen
						mp3MySQL.anfrageString = "select dateinr from DATEI where dateiEndung = '"+
						dateiEndung+"' and dateiName = '"+ nameOhneKommata +
						"' and datumLetzteDateiAenderung = "+dateTime+" and verzeichnisAufMedium = '"+
						verzeichnisAufMedium+"' and nrDesMediums = "+ +medienErkennung.tempDatenTraeger.nrDesMediums+";";
						
						//System.out.println("anfragestring = "+mp3MySQL.anfrageString);
						
						ResultSet res = mp3MySQL.getResultSet();
						while(res.next()){
						dateinr = res.getInt(1);
						}
						//System.out.println("gefundene dateinr = "+dateinr);
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					if(dateinr != -1){
						System.out.println("vor try mp3file");
						try {
						String verzeichnisAufMediumUnbehandelt = verzeichnisAufMediumBestimmen(((File)v.elementAt(i)));
						String nameDerMP3Datei = ((File)v.elementAt(i)).getName();
						
							System.out.println("vor mp3file anlegen");
						
							MP3File tempMP3File = new MP3File(verzeichnisAufMediumUnbehandelt,nameDerMP3Datei);
							
							System.out.println("nach mp3file anlegen");
							
								System.out.println("vor titel anlegen");
								//titel bestimmen
								TagContent tempTagContent;
								try {
									tempTagContent = tempMP3File.getTitle();
								} catch (FrameDamagedException e3) {
									// TODO Auto-generated catch block
									tempTagContent = null;
									//e3.printStackTrace();
								}
								String songTitel;
								if(tempTagContent == null){
									songTitel = " ";
								}
								else{
									songTitel = tempTagContent.getTextContent();
									
									System.out.println("nach titel anlegen");
									if(songTitel != null){
										if(songTitel.indexOf("'")!= -1){
											songTitel = this.hochKommasInDateiNameEntfernen(songTitel);
											}
										if(songTitel.indexOf(",")!= -1){
												songTitel = this.kommasInDateiNameEntfernen(songTitel);
											}
									}
								}
								/*if(songTitel != null && songTitel.equals("")){
									songTitel = null;
									
								}*/
								
								//System.out.println("songtitel = "+songTitel);
								//interpret bestimmen
								System.out.println("vor interpret");
								try{
								tempTagContent = tempMP3File.getArtist();
								}
								catch(FrameDamagedException e3) {
									// TODO Auto-generated catch block
									tempTagContent = null;
									//e3.printStackTrace();
								}
								String interpret;
								if(tempTagContent == null){
									 interpret = " ";
								}
								else{
									 interpret = tempTagContent.getTextContent();
									System.out.println("nach interpret");
									if(interpret != null){
										if(interpret.indexOf("'")!= -1){
											interpret = this.hochKommasInDateiNameEntfernen(interpret);
											}
										if(interpret.indexOf(",")!= -1){
											interpret = this.kommasInDateiNameEntfernen(interpret);
											}
									}
									if(interpret != null && interpret.equals("")){
										interpret = null;
										
									}
								}
								
								
								//System.out.println("interpret = "+interpret);
								
								//trackläenge
								
									System.out.println("vor länge");
									try{
										tempTagContent = tempMP3File.getTime();
									}
									catch(FrameDamagedException e3) {
										// TODO Auto-generated catch block
										tempTagContent = null;
										//e3.printStackTrace();
									}
									String tracklaenge;
									if(tempTagContent == null){
										 tracklaenge = " ";
									}
									else{
									
									 tracklaenge = tempTagContent.getTextContent();
									System.out.println("nach länge");
									if(tracklaenge == null){
										long trackDauerInSekunden = tempMP3File.getLength();
										int stunden = (int)trackDauerInSekunden/(60*60);
										int minuten = ((int)trackDauerInSekunden - (stunden * 3600))/60;
										int sekunden = (int)trackDauerInSekunden - (stunden * 3600) - (minuten * 60);
										tracklaenge = stunden+":"+minuten+":"+sekunden;
										//System.out.println("trackdauer = "+stunden+":"+minuten+":"+sekunden);
										
									}
									}
								
								
								//System.out.println("tracklaenge = "+tracklaenge);
								
								//genre
									try{
								tempTagContent = tempMP3File.getGenre();
									}
									catch(FrameDamagedException e3) {
										// TODO Auto-generated catch block
										tempTagContent = null;
										//e3.printStackTrace();
									}
									String genre;
									if(tempTagContent == null){
										 genre = " ";
									}
									else{
									
									
								 genre = tempTagContent.getTextContent();
								if(genre != null){
									if(genre.indexOf("'")!= -1){
										genre = this.hochKommasInDateiNameEntfernen(genre);
										}
									if(genre.indexOf(",")!= -1){
										genre = this.kommasInDateiNameEntfernen(genre);
										}
								}
								if(genre != null && genre.equals("")){
									genre = null;
									
								}
								if(genre != null){
									int start = genre.indexOf("(");
									int stop = genre.indexOf(")");
									//wenn (genreNr) in genreTag
									if(stop != -1 && start != -1){
										//System.out.println("nr im tag; genre vor zuordnung= "+genre);
										int genreNr = Integer.parseInt(genre.substring(start+1,stop));
										genre =genreMp3NachNrZuordnen(genreNr); //genreName zuordnen
										//tempTagContent = tempMP3File.getTitle();
										//System.out.println("nr im tag; genre nach zuordnung= "+genre
											//	+"; genrenr = "+genreNr+" für den titel "+tempTagContent.getTextContent());
										
									}
									/*else{
										System.out.println("keine nr im tag; genre = "+genre);
									}*/
																		
									/*for (int genreNr = 0; genreNr < 116;genreNr++){
										//wenn zahl im genre gefunden
										if(genre.indexOf(""+genreNr)!= -1){
											genre =genreMp3NachNrZuordnen(genreNr);										
										}
									}*/
								}
									}
								//System.out.println("genre = "+genre);
								
								//bitrate
								int bitrate; 
								
								 bitrate = tempMP3File.getBitrate();
								}
								
								if(tempTagContent == null){
									 bitrate = -1;
								}
								
								//System.out.println("bitrate = "+bitrate);
								//jahr
								String jahr;
								try{
								tempTagContent = tempMP3File.getYear();
								}
								catch(FrameDamagedException e3) {
									// TODO Auto-generated catch block
									tempTagContent = null;
									//e3.printStackTrace();
								}
								if(tempTagContent == null){
									 jahr = "-1";
								}
								else{
								
									 jahr = tempTagContent.getTextContent();
									if(jahr != null){
										if(jahr.indexOf("'")!= -1){
											jahr = this.hochKommasInDateiNameEntfernen(jahr);
											}
											if(jahr.indexOf(",")!= -1){
												jahr = this.kommasInDateiNameEntfernen(jahr);
											}
									}
									if(jahr != null && jahr.equals("")){
										jahr = null;
										
									}
								}
								//System.out.println("jahr = "+jahr);
								
								//album
								try{
								tempTagContent = tempMP3File.getAlbum();
								}
								catch(FrameDamagedException fde){
									tempTagContent = null;
									//System.out.println("album null");
								}
								catch(TagFormatException tfe){
									tempTagContent = null;
								}
								String album;
								if(tempTagContent == null){
									album = " ";
								}
								else{
								album = tempTagContent.getTextContent();
								
								
									if(album != null){
										if(album.indexOf("'")!= -1){
										album = this.hochKommasInDateiNameEntfernen(album);
										}
										if(album.indexOf(",")!= -1){
										album = this.kommasInDateiNameEntfernen(album);
										}
									}
									if(album != null && album.equals("")){
										album = null;
										
								}
								}
								
								//System.out.println("album = "+album);
								
//								mp3dateien anlegen
								mp3MySQL.anfrageString = "insert into mp3file values(null,'"+songTitel+"','"+
								interpret+"','"+tracklaenge+"','"+genre+"',"+bitrate+","+jahr+",'"+album+"',"+dateinr+");";
								//System.out.println("mp3MySQL.anfrageString ="+mp3MySQL.anfrageString);
								try {
									mp3MySQL.sqlAnfrageAnDBSchicken();
								} catch (SQLException e4) {
									// TODO Auto-generated catch block
									e4.printStackTrace();
								}
								
								
								
							 
							
						} catch (ID3v2WrongCRCException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						} catch (ID3v2DecompressionException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						} catch (ID3v2IllegalVersionException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						} catch (IOException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						} catch (NoMP3FrameException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						}
 
in folgenden 2 methoden von MP3File treten die nicht abfangbaren FrameDamagedExceptions auf

Code:
public TagContent getGenre()
        throws FrameDamagedException
    {
        TagContent ret = new TagContent();
        byte v2cont[] = (byte[])null;
        try
        {
            v2cont = ((ID3v2Frame)id3v2.getFrame("TCON").elementAt(0)).getContent();
        }
        catch(ID3v2Exception id3v2exception) { }
        if(v2cont == null)
        {
            try
            {
                int v1cont = id3.getGenre();
                ret.setContent("(" + v1cont + ")");
            }
            catch(ID3Exception e) { }
        } else
        {
            Parser parse = new Parser(v2cont, true);
            try
            {
                ret.setContent(parse.parseText());
            }
            catch(ParseException e)
            {
                throw new FrameDamagedException();
            }
        }
        return ret;
    }

public TagContent getAlbum()
        throws TagFormatException
    {
        TagContent ret = TextFrameEncoding.read(id3v2, "TALB");
        if(ret.getTextContent() == null)
            try
            {
                ret.setContent(id3.getAlbum());
            }
            catch(NoID3TagException noid3tagexception) { }
		
        return ret;
    }

ist der fehler das getAlbum() keine FrameDamagedException throwt
und getGenre() bei ID3Exception nichts throwt ?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben