[java] xmms aanroepen

Pagina: 1
Acties:

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
Ik probeer vanuit een java programma xmms aan te roepen met een zojuist geselecteerde mp3 file.
Helaas wil me dit niet echt lukken, stteds opent xmms met slechts het laatste woord van het mp3-tje. Onder windows met winamp lukt het wel
hieronder de source:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public void actionPerformed(ActionEvent e) {

        Runtime rt = Runtime.getRuntime();

        if (e.getSource() == play) {

            try {

                rt.exec("c:\\program files\\winamp\\winamp.exe " + "\"" + mp3 + "\"");

            } catch (IOException er) {

                try {

                    Process p = rt.exec("xmms" + " " + "\"" + mp3 + "\"");


                } catch (IOException er1) {

                    System.out.println(er1);

                }

            }

        }

        if (e.getSource() == stop) {

            try {

                rt.exec("c:\\program files\\winamp\\winamp.exe -stop");

            } catch (IOException er) {

                try {

                    rt.exec("xmms -s");

                } catch (IOException er1) {

                    System.out.println(er1);

                }

            }

        }

    }

mp3 is een string met het volledige pad van het mp3-tje
vb: /mnt/mp3-1/lala.mp3
als ik een sh script aanroep met de volgende inhoud
code:
1
xmms $1

opent xmms zijn file open geval, het mp3-tje wordt dus niet geparsed naar de variabele.
vanuit de prompt (bash of sh) werkt het wel perfect. De statement xmms -s werkt ook zoals het hoort, wat gaat hier fout?

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


Verwijderd

Draai je dit als applet?

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
Neen, dit wordt gestart vanuit een programma

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Gebruik anders het JMF (Java Media Framework) dan kun je een Java speler gebruiken :) En dan werkt ut ook nog op alle platformen :)

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

spaties in de bestandsnaam?

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
Ja er kunnen spaties in de bestandsnaam zitten
gebruik maken van JMF wil ik juist niet, dit heb ik gebruikt, maar kreeg vanuit de gebruikers te horen dat ze liever xmms/winamp hadden voor het spelen. Het speel gedeelte is slechts een onderdeel van het gehele programma.

Maar terugkerend naar de spaties:
onder windows geen enkel probleem
daarnaast heb ik "'s om de naam gezet om dit te voorkomen

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

print de lijn die exec aanroept eens naar je scherm, en kijk wat je daarvan kunt maken

(je kunt de naam van het OS opvragen he!, hoef je geen lelijke try-catch te gebruiken)

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
xmms "/mnt/mp3-1/win-nt/lala.mp3"

als ik deze in een shell draai wordt xmms gestart met lala.mp3

de commandline is dus goed (lijkt mij)

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


Verwijderd

Ik ben niet zo goed thuis in andere OSen dan Windows maar is het probleem misschien niet dat je een relatief pad opgeeft (/mnt/mp3-1/win-nt/lala.mp3) Misschien moet je er een compleet pad van maken?

Verwijderd

waarom gebruik je in je voorbeeld "\" terwijl je "//" nodig hebt?

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
Ik ben niet zo goed thuis in andere OSen dan Windows maar is het probleem misschien niet dat je een relatief pad opgeeft (/mnt/mp3-1/win-nt/lala.mp3) Misschien moet je er een compleet pad van maken?
dat ís een compleet pad
waarom gebruik je in je voorbeeld "\" terwijl je "//" nodig hebt?
In Linux (en andere *nixen) gebruik je / en niet \ zoals in windows. Deze gegevens (het pad en de /) komen zo uit de File die ik java aanmaak vanuit een scan op de harddisc.

edit:

/ en \ verwisseld, nu klopt het weer

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


Verwijderd

waar is de laatste "\" voor dan? Ik gok dat je vanaf een samba mount de mp3's tovert . Er betstaat zoiets als een PathDelimiter oid.

en in *nixen is het / en niet \ . Maar dat terzijde

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
In het voorbeeld :
"/mnt/mp3-1/lala.mp3"
is mijn mp3 schijf gemount in de map /mnt/mp3-1
lala.mp3 is het mp3'tje
Geen samba dus, maar over welke / heb je het precies?

p.s. gelieve niet te kijken naar de windows code (c:\\program files\\ enz...) dat staat hier buiten

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


Verwijderd

Runtime.exec(String) gebruikt een StringTokenizer om command en arguments uit de door jou aangeleverde string te halen. Ik denk dat die StringTokenizer geen quotes begrijpt, maar dat je eventuele karakters in de filenaam die ook als token seperators gelden (spatie, tab, cr, lf, formfeed) moet escapen met een \.

Of je gebruikt Runtime.exec(String[]) waarin je het commando en de filenaam apart in een array zet.

If all else fails: kijk in de sourcecode hoe die runtime functies precies werken. (/src/java/lang/Runtime.java)

Success! :)

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Topicstarter
Het is gelukt :)

de oplossing:
code:
1
2
3
4
String[] parseIt = new String[2];
                    parseIt[0] = "xmms";
                    parseIt[1] = mp3.toString();
                    Process p = rt.exec(parseIt);

met de cmdArray lukt het dus wel
eerste is het commando wat je aanroept
tweede zijn argument

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


Verwijderd

RTFM dus :P

Waarom niet zo trouwens?
code:
1
Process p = rt.exec(new String[] { "xmms", mp3.toString() });
Pagina: 1