# Filechooser File Öffnen



## luke_duke (24. Nov 2009)

Hallo Leute ,
ich habe ein echt großes Problem.
Und zwar ich habe ein Programmgeschrieben welches ein MP3 öffnet und dort den ID3v1 Tag auslest.
Ich hab mir dazu einen Filechooser gebastelt , der mir den Pfad der Datei zurückgibt. Jedoch funktioniert das nicht richtig, könnte da jemand mal drübergucken?
Wäre echt hilfreich für mich!

```
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;




public class ID3 extends JFrame implements ActionListener{
	JPanel mp3 =new JPanel();
	JPanel menub =new JPanel();  // Auf diesem Panel befindet sich die Menubar und das mp3 Panel
	JLabel title = new JLabel("Titel");
	JLabel artist = new JLabel("Artist");
	JLabel album = new JLabel("Album");
	JLabel year = new JLabel("Jahr");
	JTextField tit =new JTextField();
	JTextField art =new JTextField();
	JTextField alb =new JTextField();
	JTextField yea =new JTextField();
	JFileChooser fc = new JFileChooser();
	JMenuBar menuBar;
	JMenu menu;
	JMenuItem open;
	public String Dir;
	int a;;
	byte[] bytarr = new byte [128];
	public ID3 ()throws IOException  
	{	
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menuBar.add(menu);
		open = new JMenuItem("Öffnen");
		menu.add(open);
		menub.setLayout(new BorderLayout());		
		mp3.setLayout(new GridLayout(4,2));
		this.getContentPane().add(menub);
		menub.add(menuBar,BorderLayout.NORTH);
		menub.add(mp3,BorderLayout.CENTER);
		open.addActionListener( this);
		mp3.add(this.title);
		mp3.add(this.tit);
		mp3.add(this.artist);
		mp3.add(this.art);
		mp3.add(this.album);
		mp3.add(this.alb);
		mp3.add(this.year);
		mp3.add(this.yea);
		
		File file = new File (Diri);
		RandomAccessFile rFile = new RandomAccessFile(file,"r");
		rFile.seek(rFile.length()-125);
		rFile.read(bytarr,0, 30);
		String title =new String(bytarr);
		rFile.seek(rFile.length()-95);
		rFile.read(bytarr,0, 30);
		String artist =new String(bytarr);
		rFile.seek(rFile.length()-65);
		rFile.read(bytarr,0, 30);
		String album =new String(bytarr);
		rFile.seek(rFile.length()-61);
		rFile.read(bytarr,0, 4);
		String year =new String(bytarr);
		title=title.trim();
		artist=artist.trim();
		album=album.trim();
		year=year.trim();
		tit.setText(""+title);
		art.setText(""+artist);
		alb.setText(""+album);
		yea.setText(""+year);
		System.out.println("Title:"+title);
		System.out.println("Artist:"+artist);
		System.out.println("Album:"+album);
		System.out.println("Jahr:"+year);
			

 
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setSize(400,300);
		
	}

	public static void main (String args []) throws IOException
	{ 
	
		ID3 mpfile= new ID3();
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		
		
			
			
				
			
			
			 int returnVal = fc.showOpenDialog(ID3.this);
			 
				 if (returnVal == JFileChooser.APPROVE_OPTION) {
					 String Diri = fc.getSelectedFile().getPath();
					 System.out.println(""+Diri);
			        } 
	}

}
```


Ich bekomme hier die Fehlermeldung:


```
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Diri cannot be resolved

	at ID3.<init>(ID3.java:61)
	at ID3.main(ID3.java:99)
```

Gruß Lukas


----------



## eRaaaa (24. Nov 2009)

steht doch da alles, zeile 61

```
File file = new File (Diri);
```

den String Diri kennt er da nicht !
(du hast oben ein   public String Dir; ) deklariert.

aber auch wenn du das abänderst wird dir da höchstens eine nullpointerexception fliegen.
der ansatz ist falsch.

nimm den ganzen file kram raus, der hat in dem konstruktor eh nichts zu suchen.
in deiner actionperformed rufst du dann eine neue methode auf, der du den string (oder gleich ein file) übergibst. die methode hat dann den ganzen mp3 kram

```
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ID3 extends JFrame implements ActionListener {
	JPanel mp3 = new JPanel();
	JPanel menub = new JPanel(); // Auf diesem Panel befindet sich die Menubar
	// und das mp3 Panel
	JLabel title = new JLabel("Titel");
	JLabel artist = new JLabel("Artist");
	JLabel album = new JLabel("Album");
	JLabel year = new JLabel("Jahr");
	JTextField tit = new JTextField();
	JTextField art = new JTextField();
	JTextField alb = new JTextField();
	JTextField yea = new JTextField();
	JFileChooser fc = new JFileChooser();
	JMenuBar menuBar;
	JMenu menu;
	JMenuItem open;
	int a;;
	byte[] bytarr = new byte[128];

	public ID3() throws IOException {
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menuBar.add(menu);
		open = new JMenuItem("Öffnen");
		menu.add(open);
		menub.setLayout(new BorderLayout());
		mp3.setLayout(new GridLayout(4, 2));
		this.getContentPane().add(menub);
		menub.add(menuBar, BorderLayout.NORTH);
		menub.add(mp3, BorderLayout.CENTER);
		open.addActionListener(this);
		mp3.add(this.title);
		mp3.add(this.tit);
		mp3.add(this.artist);
		mp3.add(this.art);
		mp3.add(this.album);
		mp3.add(this.alb);
		mp3.add(this.year);
		mp3.add(this.yea);

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setSize(400, 300);

	}

	public static void main(String args[]) throws IOException {

		ID3 mpfile = new ID3();
	}

	public void readData(String Diri) throws IOException {
		File file = new File(Diri);
		RandomAccessFile rFile = new RandomAccessFile(file, "r");
		rFile.seek(rFile.length() - 125);
		rFile.read(bytarr, 0, 30);
		String title = new String(bytarr);
		rFile.seek(rFile.length() - 95);
		rFile.read(bytarr, 0, 30);
		String artist = new String(bytarr);
		rFile.seek(rFile.length() - 65);
		rFile.read(bytarr, 0, 30);
		String album = new String(bytarr);
		rFile.seek(rFile.length() - 61);
		rFile.read(bytarr, 0, 4);
		String year = new String(bytarr);
		title = title.trim();
		artist = artist.trim();
		album = album.trim();
		year = year.trim();
		tit.setText("" + title);
		art.setText("" + artist);
		alb.setText("" + album);
		yea.setText("" + year);
		System.out.println("Title:" + title);
		System.out.println("Artist:" + artist);
		System.out.println("Album:" + album);
		System.out.println("Jahr:" + year);

	}

	@Override
	public void actionPerformed(ActionEvent arg0) {

		int returnVal = fc.showOpenDialog(ID3.this);

		if (returnVal == JFileChooser.APPROVE_OPTION) {
			String Diri = fc.getSelectedFile().getPath();
			try {
				readData(Diri);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}
```


----------



## luke_duke (24. Nov 2009)

Meinst du ich soll eine Methode z.B public void fileChoose(String Diri) erzeugen , und in dieser den String Diri übergeben?



Gruß Lukas

Edit: 1000 Dank funktioniert jetzt Prima , war wohl etwas zu über Eifrig!


----------



## eRaaaa (24. Nov 2009)

hab meinen post mal editiert. so in etwa. schönheitsfehler hier und da noch, aber so sollte es funktionieren


----------



## luke_duke (24. Nov 2009)

Hallo, ich muss nochmals kurz stören.
Ich hab jetzt die ganze Datengeschichte in eine eigene Klasse

```
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;


public class MP3_READ_DATA {
	byte[] bytarr = new byte [128];
	
	public void fileChoose(String name) throws IOException
	{	MP3_GUI GUI = new MP3_GUI();
		File file = new File (name);
	    RandomAccessFile rFile = new RandomAccessFile(file,"r");
	    rFile.seek(rFile.length()-125);
	    rFile.read(bytarr,0, 30);
	    String title =new String(bytarr);
	    rFile.seek(rFile.length()-95);
	    rFile.read(bytarr,0, 30);
	    String artist =new String(bytarr);
	    rFile.seek(rFile.length()-65);
	    rFile.read(bytarr,0, 30);
	    String album =new String(bytarr);
	    rFile.seek(rFile.length()-31);
	    rFile.read(bytarr,0, 30);
	    String comm =new String(bytarr);
	    title=title.trim();
	    artist=artist.trim();
	    album=album.trim();
	    comm=comm.trim();
	    GUI.tit.setText(""+title);
	    GUI.art.setText(""+artist);
	    GUI.alb.setText(""+album);
	    GUI.com.setText(""+comm);
	    System.out.println("Title:"+title);
	    System.out.println("Artist:"+artist);
	    System.out.println("Album:"+album);
	    System.out.println("Kommentar:"+comm);
	}
}
```

meine GUI auch

```
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class MP3_GUI extends JFrame implements ActionListener{
	MP3_READ_DATA rddata= new MP3_READ_DATA ();
	JButton pl = new JButton("Play");
	JPanel mp3 =new JPanel();
	JPanel menub =new JPanel();  // Auf diesem Panel befindet sich die Menubar und das mp3 Panel
	JLabel title = new JLabel("Titel");
	JLabel artist = new JLabel("Artist");
	JLabel album = new JLabel("Album");
	JLabel comm = new JLabel("Kommentar");
	JTextField tit =new JTextField();
	JTextField art =new JTextField();
	JTextField alb =new JTextField();
	JTextField com =new JTextField();
	JFileChooser fc = new JFileChooser();
	JMenuBar menuBar;
	JMenu menu;
	JMenuItem open;
	public MP3_GUI()
	{
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menuBar.add(menu);
		open = new JMenuItem("Öffnen");
		menu.add(open);
		menub.setLayout(new BorderLayout());		
		mp3.setLayout(new GridLayout(4,2));
		this.getContentPane().add(menub);
		menub.add(menuBar,BorderLayout.NORTH);
		menub.add(mp3,BorderLayout.CENTER);
		open.addActionListener( this);
		mp3.add(this.title);
		mp3.add(this.tit);
		mp3.add(this.artist);
		mp3.add(this.art);
		mp3.add(this.album);
		mp3.add(this.alb);
		mp3.add(this.comm);
		mp3.add(this.com);
		mp3.add(this.pl);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setSize(400,300);
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {
	//	MP3 playi= new MP3(null);
		 int returnVal = fc.showOpenDialog(null);
		 if (returnVal == JFileChooser.APPROVE_OPTION) {
			String name = fc.getSelectedFile().getPath();
			
			 try {
				rddata.fileChoose(name);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	        } 
		 if(pl.equals(arg0.getSource()))
		 {
			 playi.play();
		 }
		 
	}
}
```

jetzt möchte ich als kleinen Gag zwischen durch die MP3-Datei abspielen lassen.
Doch wie komme ich in der Mp3 and den Pfad?
Ich habs mals so probiert mit einem Object im AL , er wirft mir jedoch wieder eine Exception

```
/*************************************************************************
 *  Compilation:  javac -classpath .:jl1.0.jar MP3.java         (OS X)
 *                javac -classpath .;jl1.0.jar MP3.java         (Windows)
 *  Execution:    java -classpath .:jl1.0.jar MP3 filename.mp3  (OS X / Linux)
 *                java -classpath .;jl1.0.jar MP3 filename.mp3  (Windows)
 *  
 *  Plays an MP3 file using the JLayer MP3 library.
 *
 *  Reference:  [url=http://www.javazoom.net/javalayer/sources.html]Java MP3 Player[/url]
 *
 *
 *  To execute, get the file jl1.0.jar from the website above or from
 *
 *      [url]http://www.cs.princeton.edu/introcs/24inout/jl1.0.jar[/url]
 *
 *  and put it in your working directory with this file MP3.java.
 *
 *************************************************************************/

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

import javazoom.jl.player.Player;


public class MP3 {
    private String filename;
    private Player player; 
    MP3_READ_DATA rddata= new MP3_READ_DATA ();
    // constructor that takes the name of an MP3 file
    public MP3(String filename) {
    	String name = null;
        this.filename = name;
        try {
			
			rddata.fileChoose(name);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }

    public void close() { if (player != null) player.close(); }

    // play the MP3 file to the sound card
    public void play() {
        try {
            FileInputStream fis     = new FileInputStream(filename);
            BufferedInputStream bis = new BufferedInputStream(fis);
            player = new Player(bis);
        }
        catch (Exception e) {
            System.out.println("Problem playing file " + filename);
            System.out.println(e);
        }

        // run in new thread to play in background
        new Thread() {
            public void run() {
                try { player.play(); }
                catch (Exception e) { System.out.println(e); }
            }
        }.start();




    }


       

}
```

Gruß Lukas


----------

