Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Compiler-FehlerThe constructor MP3File(File) refers to the missing type NoMPEGFramesException
ich verwende Eclipse Mars.1 Release (4.5.1) auf openSUSE 13.2 und habe in mein Projekt eine externe Libary (https://sourceforge.net/projects/jd3lib/) eingebunden.
Dazu habe ich das Zip file unter File --> Properties --> Java Build Path --> Add External JARs eingebunden. Mit einer anderen externen Libary (ein MySQL Connector) war ich damit schon mal erfolgreich.
Nun habe ich folgenden Code:
Code:
package sebastian;
import java.io.File;
import java.io.IOException;
import mp3reader.helliker.id3.*;
public class Starter {
public static void main(String[] args) throws IOException
{
File file = new File ("/home/sebastian/05 - Knockin' On Heaven's Door.mp3" );
mp3 = new MP3File(file);
}
}
}
Der Compiler gibt mir dazu folgende Fehlermeldung:
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
mp3 cannot be resolved to a variable
The type helliker.id3.CorruptHeaderException cannot be resolved. It is indirectly referenced from required .class files
The type helliker.id3.ID3v2FormatException cannot be resolved. It is indirectly referenced from required .class files
The type helliker.id3.NoMPEGFramesException cannot be resolved. It is indirectly referenced from required .class files
The constructor MP3File(File) refers to the missing type NoMPEGFramesException
at sebastian.Starter.main(Starter.java:16)
Was ist hier falsch? Warum kann die Klasse NoMPEGFramesException, die ich unter Referenced Libaries in dem entsprechenden Package sehe, nicht referenziert werden?
Stimmt. Du hast recht. Um jetzt den Code nicht falsch abzuschreiben, habe ich ein Codebeispiel mal kopiert:
Java:
package sebastian;
import java.io.File;
import java.io.IOException;
import mp3reader.helliker.id3.*;
public class Starter {
public static void main(String[] args) throws IOException {
File f = new File("/home/sebastian");
loadFromDirectory(f, false);
}
public static void loadFromDirectory( File dir, boolean recurse )
throws IOException {
if( dir.isDirectory() ) {
File[] files = dir.listFiles( new MP3FileFilter(true) );
MP3File mp3 = null;
for( int i = 0; i < files.length; i++ ) {
if( files[i].isFile() ) {
try {
mp3 = new MP3File( files[i] );
this.add( mp3 );
}
catch( Exception e ) {
// Do nothing. Bad mp3, don't add.
}
}
else if( recurse ) {
loadFromDirectory( files[i], recurse );
}
}
}
else {
throw new IOException( "Error loading playlist from a directory: "
+ dir.getAbsolutePath() + " is not a " +
"directory" );
}
}
}
Nun bekomme ich beim Kompilieren folgende Fehler:
Code:
The project was not built since its build path is incomplete. Cannot find the class file for helliker.id3.CorruptHeaderException. Fix the build path then try building this project
The type helliker.id3.CorruptHeaderException cannot be resolved. It is indirectly referenced from required .class files Starter.java /sebastian/src/sebastian line 26 Java Problem
Wird diese Zeile von Eclipse rot markiert ? Falls nicht müsste die Lib korrekt importiert sein. Aber du kannst ja mal noch eine Zeile dahinter schreiben wo du diese fehlende Exception explizit importierst (statt mit .*)
Edit: ich vermute die Zeile this.add(mp3); wird er auch als fehlerhaft markieren In deinem Beispiel wurde die Klasse von LinkedList abgeleitet. Das hast du nicht, deshalb kennt er die Methode add(...) nicht. (Vermute ich jedenfalls)
nein, die genannte Zeile wird so akzeptiert. Ich habe es aber aufgegeben mit dieser Libary zu arbeiten. Ich möchte im Grunde nur ID-Tag Informationen aus MP3 Dateien auslesen und dies ist mir nun mit Methoden aus der Klasse FileInputStream gelungen. Daher ist aus meiner Sicht die Lösung des hier dargestellten Problems nun obsolet. Ich bedanke mich recht herzlich für deine Beteiligung!