Hallo Forum,
ich habe Methoden, die einen übergeben Ordnderpfad nach mp3-Datein durchsuchen und aus denen dann das CoverImage mit Hilfe der mp3agic library auslesen.
Ordner durchsuchen und mp3-files finden:
Liste mit mp3-dateien durchgehen und aus ihnen die Coverbilder rauslesen:
Das dauert natürlich unter Umständen etwas länger.
Bisher lasse ich dann einen Dialog anzeigen, der sagt: Bitte warten es wird gesucht.
Das Programm reagiert während es sucht auf keinerlei Aktionen vom Benutzer.
Nun möchte ich gerne einen Fortschrittsbalken einbauen, der anzeigt, dass auch was getan wird. Sonst kommt schnell der Verdacht auf: "Da passiert ja gar nichts! Das Programm ist bestimmt abgestürzt!" un Unmut macht sich breit.
Nun bin ich Neu in Java und bin vollkommen mit Threads und dem ganezn drumherum überfordert.
Google gibt zwar viele Beispiele, von denen verstehe ich aber nicht viel.
Kann mir einer von euch helfen?
Eine auf mein Problem zugeschnittene Anweisung, was ich tun muss wäre super perfekt. Ich will netürlich nicht, dass mir jemand die Arbeit abnimmt, einfach nur, dass jemand mir die Reihenfolge dessen erklärt, was ich denn tun muss.
Lg
MasseElch
Ps:
EIne weitere Frage: Die Methode listDir() schreibt ja nur die absoluten Pfade in die Liste. Ist es hier sinnvoll, direkt die files reinzuschreibenund zu übergeben? Das spart Zugriffszeit auf den Speicher, ich habe da aber Angst, dass das Array dann schnell zu groß wird und den Speicher sprengt. Ist das eine berechtigte Sorge?
ich habe Methoden, die einen übergeben Ordnderpfad nach mp3-Datein durchsuchen und aus denen dann das CoverImage mit Hilfe der mp3agic library auslesen.
Ordner durchsuchen und mp3-files finden:
Java:
private void listDir(File dir) {
File[] dirArr = dir.listFiles();
if (dirArr != null) {
for (int i = 0; i < dirArr.length; i++) {
if (dirArr[i].isDirectory()) {
listDir(dirArr[i]); // ruft sich selbst mit dem
// Unterverzeichnis als Parameter auf
}else {
if(dirArr[i].getName().endsWith("mp3"))
this.mp3Locations.add(dirArr[i].getAbsolutePath());
}
}
}
}
Liste mit mp3-dateien durchgehen und aus ihnen die Coverbilder rauslesen:
Java:
public Images(ArrayList<String> mp3Locations) {
this.images = new LinkedList<ShowImage>();
BufferedImage tmpImage;
ShowImage tmpShowImage;
int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
int imageHeight = screenHeight/5;
int initialyPos = -imageHeight;
try {
for (String mp3Location : mp3Locations) {
Mp3File song = new Mp3File(mp3Location);
if (song.hasId3v2Tag()){
ID3v2 id3v2tag = song.getId3v2Tag();
//get data out of mp3File
byte[] imageData = id3v2tag.getAlbumImage();
String interpret = id3v2tag.getArtist();
String title = id3v2tag.getTitle();
//is there an image?
//yes there is, so use it
if(imageData != null) {
//converting the bytes to an image
tmpImage = ImageIO.read(new ByteArrayInputStream(imageData));
//no there isnt so take placeholder instead
} else {
tmpImage = ImageIO.read(getClass().getResource("../resource/noImage.jpg"));
}
tmpShowImage = new ShowImage(tmpImage, initialyPos, interpret, title);
this.images.add(tmpShowImage);
initialyPos -= imageHeight+20;
}
}
this.yPosLastImage = initialyPos+screenHeight+2*imageHeight;
} catch (IOException | InvalidDataException | UnsupportedTagException e) {
//TODO - Exception Handling
}
Das dauert natürlich unter Umständen etwas länger.
Bisher lasse ich dann einen Dialog anzeigen, der sagt: Bitte warten es wird gesucht.
Das Programm reagiert während es sucht auf keinerlei Aktionen vom Benutzer.
Nun möchte ich gerne einen Fortschrittsbalken einbauen, der anzeigt, dass auch was getan wird. Sonst kommt schnell der Verdacht auf: "Da passiert ja gar nichts! Das Programm ist bestimmt abgestürzt!" un Unmut macht sich breit.
Nun bin ich Neu in Java und bin vollkommen mit Threads und dem ganezn drumherum überfordert.
Google gibt zwar viele Beispiele, von denen verstehe ich aber nicht viel.
Kann mir einer von euch helfen?
Eine auf mein Problem zugeschnittene Anweisung, was ich tun muss wäre super perfekt. Ich will netürlich nicht, dass mir jemand die Arbeit abnimmt, einfach nur, dass jemand mir die Reihenfolge dessen erklärt, was ich denn tun muss.
Lg
MasseElch
Ps:
EIne weitere Frage: Die Methode listDir() schreibt ja nur die absoluten Pfade in die Liste. Ist es hier sinnvoll, direkt die files reinzuschreibenund zu übergeben? Das spart Zugriffszeit auf den Speicher, ich habe da aber Angst, dass das Array dann schnell zu groß wird und den Speicher sprengt. Ist das eine berechtigte Sorge?