Jar erstellen + getresource

loocker

Mitglied
Hi,

ich habe folgendes Problem - habe schon reichlich gegoogelt und auch hier im Forum geguckt aber nichts passendes gefunden - und zwar . möchte ich gerne eine Jar erstellen die Sound und Bilddateien enhält. Bis jetzt habe ich die Datei so aufgerufen
Java:
public String datei = "Sounds/01 - Sylvester.mp3";
da ich das mit getresource nicht hinbekommen habe. Habe bestimmt schon 20 Versionen versucht aber habe immer die Fehlermeldung bekommen "Unkown Source". Eine Variante ist
Java:
String datei = getClass().getResource("Sounds/01 - Sylvester.mp").toString();

Die Ordnerstruktur in eclipse Helios ist wie folgt:
SEPSpace
  • src
  • Sounds (Sound Dateien)
  • Bilder (Bilder in Unterordnern)
und im src Ordner befinden sich noch mehere packages

Wie kann ich jetzt vorgehen, das das funktioniert, mit Java Anfänger und bin Froh das es jetzt in Eclipse überhaupt läuft.
Hier noch mein Quellcode
Java:
package gruppe_e.sepspace.funktionen;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;


import javazoom.jl.decoder.*; 
import javazoom.jl.player.advanced.AdvancedPlayer;
import javazoom.jl.player.advanced.PlaybackEvent;
import javazoom.jl.player.advanced.PlaybackListener;

  public class Sound 
{
	static AdvancedPlayer player = null; 
    int i = 1;
    InputStream is;
    String Lieder[] = { "Sounds/01 - Sylvester.mp3", "Sounds/02 - China Experience.mp3" , "Sounds/03 - The World.mp3",
    		"Sounds/04 - Trance in the House.mp3"};
 	public String datei = "Sounds/01 - Sylvester.mp3";
 	//String datei = getClass().getResource("/01 - Sylvester.mp").toString();
 	 	
 	public void PlayerIni() throws JavaLayerException, FileNotFoundException
	{
    	try 		
		{	
			is = new FileInputStream( datei );
			player = new AdvancedPlayer(   (is)); 
        } 
        catch ( JavaLayerException e ) 
        { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        }
        player.setPlayBackListener(new PlaybackListener() {
            public void playbackFinished(PlaybackEvent evt) {
            	try {
					actionPerformed(evt);
				} catch (JavaLayerException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} 
            }

			private void actionPerformed(PlaybackEvent evt) throws JavaLayerException, FileNotFoundException 
			{
				if(i >= Lieder.length)
					i = 0;
				datei = Lieder[i] ;
				i++;
				PlayerIni();
				SoundOnOff(true);
			}
        });
	}
	
	public void SoundOnOff(boolean OnOff) throws JavaLayerException
    {
    	if(OnOff)
    		player.play();
    	else
    		player.close();
    }
}
 
1. Verwende
Code:
getResourceAsStream()
dann bekommst du gleich den InputStream.
2. Fuege ein
Code:
/
vor den Pfad ein, damit Java die Datei im Root des Classpath sucht, ansonsten wird relativ zu deiner Java Klasse gesucht.

Java:
InputStream is = getClass().getResourceAsStream("/Sounds/01 - Sylvester.mp");
 
hi, danke schon mal für die Antwort. Habe meinen Code jetzt so abgeändert:
Java:
public void PlayerIni() throws JavaLayerException, FileNotFoundException
	{
    	try 		
		{	InputStream is = getClass().getResourceAsStream("/Sounds/01 - Sylvester.mp");
 	
						player = new AdvancedPlayer(is ); 
        }
Leider ohne Erfolg, bekomme diese Fehlermeldung:
Java:
Exception in thread "Thread-5" java.lang.NullPointerException: in
	at javazoom.jl.decoder.Bitstream.<init>(Unknown Source)
	at javazoom.jl.player.advanced.AdvancedPlayer.<init>(Unknown Source)
	at javazoom.jl.player.advanced.AdvancedPlayer.<init>(Unknown Source)
	at gruppe_e.sepspace.funktionen.Sound.PlayerIni(Sound.java:30)
	at gruppe_e.sepspace.funktionen.SoundThread.run(SoundThread.java:20)
Findet anscheinend die Datei nicht.
 
eigentlich mp3. Aber bekomme die gleich Fehlermeldung.
Wo genau muss die Sounddatei liegen, habe sie imo als normalen Ordner im Projekt, oder muss der Soundordner auch ein SourceFolder sein?
 
Zuletzt bearbeitet:
Muss natürlich auch ein Sourcefolder sein, sonst liegt er nicht im Classpath.

Sourcefolder liegt im Klassenpfad? Warum das denn... die Klassen sollten im Klassenpfad liegen.

Man kann doch bei Eclipse auch eine Verzeichnis in den Klassenpfad aufnehmen, oder? Entweder als Library oder in der Run-Konfiguration.
 
unbendfdfannt.png


so sieht das imo bei Eclipse aus, im Package Explorer.
 
Hast du Eclipse über die Ressourcen informiert (BuildPath)?
Wenn ich das richtig in Erinnerung habe, kopiert Eclipse sie nur dann in den "bin"-Zweig, wenn sie im BuildPath sind.
Wenn nicht liegen sie nur im "src"-Zweig und nützen niemandem.

Beste Grüße
 
Denke schon, wenn ich auf Properties des Projektes gehe und dann auf Java Build Path ist dort unter Source, der src und Sound Ordner angegeben. Meinst du das damit?
 
Evtl. mal im Windows Explorer prüfen, ob sich die mp3s im bin Ordner des Projektes befinden. Mp3 ist ja jetzt nicht so üblich, evtl. filtert eclipse hier.
 
weiß nicht warum, aber jetzt geht es mit
Java:
InputStream is = getClass().getResourceAsStream("/01 - Sylvester.mp3");
und auch wenn ich eine Jar raus mache. :toll:
Danke für die ganzen Tipps!
Wie man oben im Anfangspost sieht, lese ich jedes Lied neu ein, wenn das andere ende ist, gibt es ein bessere Lösung. Indem man alle aufeinmal in den inputstream einließt?
 
weiß nicht warum, aber jetzt geht es mit..

weil du Sounds als 'Source' Folder definiert hast. Die Source Folders sind nicht Teil des Classpaths.
Vergleiche es mit dem default 'src' Folder. Dieser wird ja auch nicht im Jarfile angelegt sondern nur deine Packete und Klassen.

Wenn du einen SubFolder Sounds haben moechtest musst du unter Sounds nochmal einen Sounds Folder anlegen.

Damit keine Verwirrung aufkommt wuerd ich den ersten Sounds Folder in 'Resources' umbenennen.

Code:
Resources (Eclipse Source Folder)
   |-- Sounds
      |-- 01 - Sylvester.mp3
      |-- 02 - ....mp3
 

Zurück
Oben