Hallo liebes Forum,
ich hoffe ihr könnt mir helfen, da ich langsam verzweifle. Ich bin ziemlicher Anfänger in Sachen Java und stehe gerade vor einem Problem.
Mein Ziel ist es, eine Art Playlist für MP3-Dateien zu schreiben. Die Dateien sollen vom Benutzer per JFilechooser von der Festplatte gewählt werden. Für jede Datei soll ein Objekt der Klasse "Lied" (hat die Eigenschaften Dateiname (String), Interpret (String), Titel (String), Dateipfad (String), Bewertung (int) und Plays (int) und die jeweiligen Getter und Setter für jede Eigenschaft. Die Lieder sollen später in einer JList dargestellt werden und es soll möglich sein, nachträglich erneut Lieder hinzuzufügen oder Einträge zu löschen.
Die Objekte sollen mit einer Schleife erzeugt werden und ich habe gelesen, dass es gut wäre, die Objekte in eine ArrayList zu schreiben. Das klappt soweit auch, allerdings werden die Eigenschaften des Objekts bei jedem Durchlauf der Schleife überschrieben. Ich habe zwar am Ende für jedes eingelesene Lied ein Objekt, allerdings stehen in jedem die Daten des letzten eingelesenen Liedes drin.
Hier ein Ausschnitt des Codes zum Hinzufügen mit dem FileChooser. Ich gebe zu, es ist sehr chaotisch und sicher nicht elegant, aber ich weiß es leider nicht besser. Wenn ihr Verbesserungsvorschläge habt, wäre es super, wenn ihr kurz erklären könntet, was mein Fehler ist, also "Dein Code macht "dies", wenn du das änderst, passiert "das"."
Auf die Eigenschaft "Genre" möchte ich mit
zugreifen.
Was mache ich falsch? Ist der Fehler beim Erstellen der Objekte oder greife ich vielleicht falsch darauf zu? Bin wie gesagt ratlos.
Koennt ihr mir vielleicht helfen? Ich waere fuer jeden Tip dankbar!
Liebe Gruesse,
Mondora
ich hoffe ihr könnt mir helfen, da ich langsam verzweifle. Ich bin ziemlicher Anfänger in Sachen Java und stehe gerade vor einem Problem.
Mein Ziel ist es, eine Art Playlist für MP3-Dateien zu schreiben. Die Dateien sollen vom Benutzer per JFilechooser von der Festplatte gewählt werden. Für jede Datei soll ein Objekt der Klasse "Lied" (hat die Eigenschaften Dateiname (String), Interpret (String), Titel (String), Dateipfad (String), Bewertung (int) und Plays (int) und die jeweiligen Getter und Setter für jede Eigenschaft. Die Lieder sollen später in einer JList dargestellt werden und es soll möglich sein, nachträglich erneut Lieder hinzuzufügen oder Einträge zu löschen.
Die Objekte sollen mit einer Schleife erzeugt werden und ich habe gelesen, dass es gut wäre, die Objekte in eine ArrayList zu schreiben. Das klappt soweit auch, allerdings werden die Eigenschaften des Objekts bei jedem Durchlauf der Schleife überschrieben. Ich habe zwar am Ende für jedes eingelesene Lied ein Objekt, allerdings stehen in jedem die Daten des letzten eingelesenen Liedes drin.
Hier ein Ausschnitt des Codes zum Hinzufügen mit dem FileChooser. Ich gebe zu, es ist sehr chaotisch und sicher nicht elegant, aber ich weiß es leider nicht besser. Wenn ihr Verbesserungsvorschläge habt, wäre es super, wenn ihr kurz erklären könntet, was mein Fehler ist, also "Dein Code macht "dies", wenn du das änderst, passiert "das"."
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
public class NeueKlasse
{
final ArrayList<Lied> arrayListe = new ArrayList<Lied>();
JButton liedHinzufuegenButton = new JButton("was dazupacken");
File audioFile = new File( ... );
// der FileChooser
liedHinzufuegenButton.addActionListener (new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
JFileChooser chooseFile = new JFileChooser();
chooseFile.setMultiSelectionEnabled(true);
//chooseFile.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
FileNameExtensionFilter mp3filter = new FileNameExtensionFilter("MP3-Files", "mp3");
chooseFile.setFileFilter(mp3filter);
int returnVal = chooseFile.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
//File datei = chooseFile.getSelectedFile();
File[] dateien = chooseFile.getSelectedFiles();
String artist = new String();
String title = new String();
String dateiName = new String();
String dateiPfad = new String();
for(int i=0 ;i<dateien.length ;i++)
{
dateiName = dateien[i].getName().toString();
try
{
dateiPfad = dateien[i].getCanonicalPath();
}
catch (IOException e2)
{
System.out.println("Fehler beim auslesen/schreiben des Dateipfades");
e2.printStackTrace();
}
// Name endet mit .mp3 ?
if(dateiName.endsWith(".mp3") || dateiName.endsWith(".MP3"))
{
System.out.println("Alles ok!");
if(audioFile.isFile())
{
try
{
//liest die ID-Tags der MP3 aus
RandomAccessFile ranFile = new RandomAccessFile(audioFile,"r");
byte[] bytearr = new byte[128];
ranFile.seek(ranFile.length()-128);
ranFile.read(bytearr,0,128);
String a = new String (bytearr,"US-ASCII");
if(!a.substring(0,3).equals("TAG"))
{
System.out.println("Keine Informationen vorhanden");
}
artist = a.substring(33,63).trim();
title = a.substring(3,33).trim();
}
catch(IOException e1)
{
System.out.println(e1);
}
}
Lied song = new Lied();
song.setDateiname( dateiName );
song.setInterpret( artist );
song.setTitel( title );
song.setPfad(dateiPfad);
song.setGenre("unbekanntes genre");
song.setBewertung(0);
song.setPlays(0);
arrayListe.add(song);
System.out.println(((Lied) arrayListe.get(i)).getDateiname().toString());
}
else
{
JOptionPane.showMessageDialog(null, "Die Datei '" + dateiName + "' konnte nicht gelesen werden, da es sich nicht um eine MP3-Datei handelt.");
}
}
}
}
}
) ;
}
Auf die Eigenschaft "Genre" möchte ich mit
Java:
arrayListe.get(0).getGenre()
Was mache ich falsch? Ist der Fehler beim Erstellen der Objekte oder greife ich vielleicht falsch darauf zu? Bin wie gesagt ratlos.
Koennt ihr mir vielleicht helfen? Ich waere fuer jeden Tip dankbar!
Liebe Gruesse,
Mondora