# Mit java Programme/Dateien starten!



## fatmc (6. Juni 2005)

Hi Leute!
Ich bin ganz frisch hier im Forum angemeldet und ich bin auf der Suche nach einer Klassen Methode in java, mit der ich ein Video starten kann.
Dieses Video soll per Button klick mit java gestartet werden!(mit Quicktime player)

Hoffe ihr könnt mir helfen für dieses eine Methode zu finden.Bitte um Quelltexte.
Bitte keine Applet Lösungen es geht um eine eigenständige Klasse die dieses ausführen soll.

Hoffe auf baldige Antwort.

MFG Fat.


----------



## jensebluemchen (6. Juni 2005)

Hey,

hier mal ein kleiner Hinweis zum Ausführen von externen Programmen in Java:


```
try {
   Runtime.getRuntime().exec("xyz.exe");
} catch( IOException ex) {
  // ...
}
```

Vielleicht hilft dir das weiter ....
wenn nicht meld dich nochmal!

Grüssle Jens


----------



## fatmc (6. Juni 2005)

Danke für die zügige Antwort , aber ist dieses nur für .exe dateien nützlich oder kann ich damit auch normale Videos (.mpeg) öffnen? Wenn es nur für exe dateien is...kann ich Videos ind .exe dateien umwandeln?

Und noch eine andere Frage... ich möchte , das innerhalb eines Java Programms (Class!, NICHT APPLET) eine sound datei abspielen lassen.die sich automatisch mit dem öffnen des Programms mit öffnet.
Ist dies möglich und wenn ja wie?


----------



## zerix (6. Juni 2005)

Hallo,
 @ Jens: soweit ich weiß kann man so nur exe-dateien ausführen.


----------



## zerix (6. Juni 2005)

Sound ist möglich. Man kann mit Java Wave-Dateien und mit JMF (Plugin für java) auch mp3 dateien abspielen. Wie das jetzt genau geht kann ich dir jetzt nicht sagen, da müsste ich erst nochmal nachschauen, ist schon ne Zeit her, seit ich das das letzte mal gemacht hab.


----------



## jensebluemchen (6. Juni 2005)

Hallo,

ich denke es sollte möglich sein auf diese Weise (siehe oben) den Quicktime-Player (.exe) zu starten und ihm eventuell dein Videofile als Argument mit zu übergeben!
Probier doch zuerst einmal in der Eingabeaufforderung aus, ob du den Quicktime-Player mit Videofile im Argument starten kannst! Ich kann es hier leider nicht ausprobieren, da ich Quicktime nicht installiert habe !

Grüssle


----------



## fatmc (6. Juni 2005)

Das Format der Sound datei sollte kein Problem sein , das Umwandeln davon ist kein Problem für mich, nur wie genau binde ich diese nun in den Quelltext von java ein?
Wäre nett wenn du ma nachschauen könntest wie du das mal gemacht hattest.
Danke schonmal.


Gibt es noch eine andere möglichkeit ein Video per Button-klick zu starten als die Jens vorgeschlagen hat?
Wenn nicht , dann schreibt mit bitte wie ich nun mit der Methode von Jens eine Video datei als .exe verwenden kann.


----------



## zerix (6. Juni 2005)

Ich sitze noch gerade im Unterricht, aber sobald ich Schluss hab schau ich mal nach.
Vielleicht hat aber schon ein anderer vorher ne Antwort.
Mit der Video-Datei, da muss ich erst was ausprobieren.


----------



## jensebluemchen (6. Juni 2005)

Hallo fatmc,

Hast du dich mal informiert, ob man Quicktime auch mit Videodatei als argument öffnen kann? Man kann den InternetExplorer z.B. auch mit Webseite als Argument öffnen, ich denke so ähnlich sollte das bei dir dann auch funktionieren:


```
try {
   Runtime.getRuntime().exec("Pfad/iexplore.exe www.google.de");
} catch( IOException ex) {
  // ...
}
```

Wenn dir diese Lösung nicht gefällt, dann informiere dich mal über JMF (wie oben schon erwähnt wurde). Hier kannst du sehen, welche Formate du damit abspielen kannst:

http://java.sun.com/products/java-media/jmf/2.1.1/formats.html 

Ich denke diese Lösung wird aber schwieriger zu realisieren und ich kann dir dabei leider auch nicht weiterhelfen!

Grüssle


----------



## zerix (6. Juni 2005)

Wenn die Sound-Datei ne Wave ist, schau dir das mal an:
http://www.galileocomputing.de/open...el_19_007.htm#Rxx365java19007040007E01F04B100

Wenn es ne MP3 ist, musst du noch ein bischen warten


----------



## jensebluemchen (6. Juni 2005)

Für MP3-Support schaust du hier:

http://java.sun.com/products/java-media/jmf/mp3/download.html


----------



## jensebluemchen (6. Juni 2005)

Hey probiers mal so müsste klappen:


```
try {
   Runtime.getRuntime().exec("C:\Program Files\QuickTime\QuickTimePlayer.exe Sample.mov");
} catch( IOException ex) {
  // ...
}
```


----------



## fatmc (6. Juni 2005)

DANKE JUNGS! Ich werd dann ma schaun was geht? Ich melde mich bestimmt nochmal!  

Schönen Tag noch , MFG Fat.


----------



## fatmc (7. Juni 2005)

Hey Jens ich habe deinen Vorschlag versucht einzubauen , aber es kommt jedemal die Fehlermeldung :"illegal escape character" ! hmm.... und nun? :/


----------



## torsch2711 (7. Juni 2005)

Hi, probiers mal statt mit:

  "C:\Program Files\QuickTime\QuickTimePlayer.exe Sample.mov"

 mit 

 "C:\\Program Files\\QickTime\\QuickTimePlayer.exe Sample.mov"


  Dann sollte das klappen 

  Gruss,
  Torsten


----------



## fatmc (7. Juni 2005)

Danke Torsten, das Problem wäre beseitigt doch nun sagt er :"cannot resolve symbol - class IOException" also woher bekomme ich die?


----------



## torsch2711 (7. Juni 2005)

Die Klasse IOException ist in dem Package java.io enthalten.

 füge einfach am anfang deines codes folgende Zeile hinzu:

 import java.io.*;


 Gruss,
 Torsten


----------



## fatmc (7. Juni 2005)

Super nun compiliert er alles und es gibt keine Fehlermeldung , doch sobald ich nun den Button klicke passiert gar nichts !  wisst ihr woran das liegt? hab ich was vergessen?


----------



## torsch2711 (7. Juni 2005)

Hast du dem Button eine Action registriert?

 Wie sieht der Code den aus?

 Hast du einen ActionListener implementiert?

 Fragen über Fragen...

 Gruss,
 Torsten


----------



## fatmc (7. Juni 2005)

Hier ist nun mein Quelltext: (ganz simpel gemacht)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Fenster extends Frame
{



    public Fenster ()
    { 

        super (" Lernpaket ");
        Button one = new Button (" Test");
        Button two = new Button (" Video");
        Button three = new Button (" Test");
        FlowLayout Buttons = new FlowLayout (FlowLayout.CENTER);
        Panel pane = new Panel (Buttons);
        pane.setLayout(Buttons);
        Label L = new Label ("PROJEKT FA ST EM                               ");
        add(pane);

        pane.add(L);
        pane.add(one);
        pane.add(two);
        pane.add(three);
        one.setBackground(Color.pink);
        two.setBackground(Color.pink);
        three.setBackground(Color.pink);
        L.setFont (new Font ("Monospaced", Font.BOLD,30));
        setSize (500, 200);
        setBackground(Color.white);
        setVisible (true);
        addWindowListener (new FensterLauscher());
    }

    class FensterLauscher extends WindowAdapter 
    {
        public void windowClosing (WindowEvent e) 
        {
            System.exit(0);
        }
    }

    public static void main (String []args ) 
    {
        new Fenster();
        Frame frame= new Fenster();
        frame.show();

    }
    public void ButtonClick(ActionEvent e)
   {
      try {
   Runtime.getRuntime().exec("C:\\Program Files\\QickTime\\QuickTimePlayer.exe Sample.mov");
} catch( IOException ex) {
  // ...
}
}
}


Ich brauche eben , dass das Video sich nach dem click auf "VIDEO" öffnet! könnt ihr ma bitte gucken wie das genau zusammengehört? Ich rall da gerade gar nix mehr!


----------



## torsch2711 (7. Juni 2005)

Aehm,

 du benötigst einen ActionListener, bei welchem du die function actionPerformed(ActionEvent e) implementieren musst (sprich dein programm starten).

  diesen ActionListener musst du beim button mit 

  Button neu=new Button("Führe Programm aus");
  neu.addActionCommand("execute");
  neu.addActionListener(<deinimplementierteractionlistener>);

  und den Button natürlich im fenster hinzufügen.

  Dann klappts 

 Hier ein Tutorial:
http://java.sun.com/docs/books/tutorial/uiswing/components/button.html

  Gruss,

  Torsten


----------



## zerix (7. Juni 2005)

So wie du das da gemacht hast, hab ich das noch nie gesehen.

So würde ich es machen:


```
public class Fenster extends Frame implements ActionListener
{
     public Fenster()
     {
       anlegen der buttons

        one.addActionListener(this);
        two.addActionListener(this);
        .....
     }


      public void actionPerformed(ActionEvent e)
      {
             if(e.getSource()==one){
              mach was du willst :)
              }


               ...................
      } 

}
```


Dann würde ich das ganze mit den buttons aus der anderen methode raus lassen. Wenn du alles an funktionalität in der anderen klasse machen willst, machst du halt das implements bei der anderen Klasse und übergibst dann den ActionListener der anderen klasse im kontruktor.


MFG


----------



## torsch2711 (7. Juni 2005)

Hi Zerix, genau meine reden,

 so wie fatmc das gemacht hat  das hinten und vorne nicht.

 Gruss,
 Torsten


----------



## fatmc (7. Juni 2005)

Ja sorry jungs, ich bin da noch ziemlich frisch in dem Gebiet und dies ist mein erstes Projekt.Schuldigung wenn ich euch da jetzt mit so blöden Fehlern von mir genervt habe.
Danke für eure hilfe ich werd ma schaun wie ich das hinbekommen.

Big THX , fatmc


----------



## zerix (7. Juni 2005)

Is nicht schlimm, Fehler macht jeder und dafür gibt es ja Foren, damit man sich helfen lassen kann.


----------



## fatmc (7. Juni 2005)

ja  nun...ich weiss immer noch nich genau wie ich das wo genau einsetzen muss!
also zerix isch würde jetzt mal deinen Vorschlag nehmen also : 

public class Fenster extends Frame implements ActionListener
{
     public Fenster()
     {
       anlegen der buttons

        one.addActionListener(this);
        two.addActionListener(this);
        .....
     }


      public void actionPerformed(ActionEvent e)
      {
             if(e.getSource()==one){
              mach was du willst 
              }


               ...................
      } 

}

nur wie und wo da genau setze ich nun  

try {
   Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe Sample.mov");
} catch( IOException ex) {
  // ...
} 


ein!

Ich bin verwirrt.


----------



## zerix (7. Juni 2005)

z. b. wenn du möchtest, dass der button one geklickt werden muss, damit das video gestartet wird, sieht das so aus:



```
public void actionPerformed(ActionEvent e)
{

   if(e.getSource()==one)
   {
      try {
         Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe        Sample.mov");
      } catch( IOException ex) {
         // ...
      } 
   }

}
```


----------



## fatmc (7. Juni 2005)

Die Variable one wird nicht gefunden? was ist das für eine variable?
"cannot resolve symbol - variable one" 
als was soll ich die deklarieren/initialisieren?

Also mein inzwischen neues Programm zum testen sieht jetzt so aus:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Fenster extends Frame implements ActionListener
{
public Fenster()
{
//anlegen der buttons

one.addActionListener(this);
two.addActionListener(this);

}
public void actionPerformed(ActionEvent e)
{

   if(e.getSource()==one)
   {
      try {
         Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe        Sample.mov");
      } catch( IOException ex) {
         // ...
      } 
   }

}
}


----------



## jensebluemchen (7. Juni 2005)

Hey, 

du kannst auch einen MouseListener verwenden und must dann nur
den MouseListener bei den Buttons registrieren, also:

1.) 
	
	
	



```
public class Fenster extends Frame implements MouseListener {...}
```

2.) Die Listener bei den Buttons registrien:

```
public Fenster ()
    {  //...
       one.addMouseListener(this);
       two.addMouseListener(this);
       three.addMouseListener(this);
       //...
    }
```

3.) Die Methoden aus dem Interface implementieren (Methoden, die du nicht brauchst einfach leer lassen):


```
public void mouseClicked(MouseEvent event) 
    {
        if(e.getName().equals("one")
        {
            try {
                Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe Sample.mov");
            } 
            catch( IOException ex) {
               // ...
            } 
       }
    }

    public void mouseEntered(MouseEvent arg0) {}

    public void mouseExited(MouseEvent arg0) {}

    public void mousePressed(MouseEvent arg0) {}

    public void mouseReleased(MouseEvent arg0) {}
```


Die Abfrage if(e.getName().equals("one") funktioniert nur, wenn du den Buttons noch einen Namen gibst. Also, z.B.:


```
one.setName("one");
```


Hoffe du kommst damit klar, kannst aber natürlich auch wie oben schon erwähnt anstelle von MouseListener auch ActionListener verwenden!

Grüssle und noch viel Spass beim proggen


----------



## zerix (7. Juni 2005)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Fenster extends Frame implements ActionListener
{



public Fenster ()
{

super (" Lernpaket ");
Button one = new Button (" Test");
Button two = new Button (" Video");
Button three = new Button (" Test");
FlowLayout Buttons = new FlowLayout (FlowLayout.CENTER);
Panel pane = new Panel (Buttons);
pane.setLayout(Buttons);
Label L = new Label ("PROJEKT FA ST EM ");
add(pane);

one.addActionListener(this);
two.addActionListener(this);
three.addActionListener(this);

pane.add(L);
pane.add(one);
pane.add(two);
pane.add(three);
one.setBackground(Color.pink);
two.setBackground(Color.pink);
three.setBackground(Color.pink);
L.setFont (new Font ("Monospaced", Font.BOLD,30));
setSize (500, 200);
setBackground(Color.white);
setVisible (true);
addWindowListener (new FensterLauscher());
}

public void actionPerformed(ActionEvent e)
{
  if(e.getSource()==one)
 {
     try {
Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe Sample.mov");
} catch( IOException ex) {
// ...
} 
 }

}
```



Das ist jetzt die eine Klasse. Aus der anderen kannste jetzt das mit den Buttons löschen


----------



## zerix (7. Juni 2005)

@ Jens
Normal macht man das aber mit dem ActionListener


----------



## fatmc (7. Juni 2005)

ja cool danke zerix , aber es gibt eine Fehlermeldung in deinem Quelltext : "cannot resolve symbol - class FensterLauscher"

whats the problem?

Ich habe diesen "FensterLauscher" nun auskommentiert und nun erkennt er dieses one nicht: "cannot resolve symbol -variable one"


----------



## jensebluemchen (7. Juni 2005)

@zerix:

Hast recht


----------



## zerix (7. Juni 2005)

mom, ich schreib mal alles richtig


----------



## zerix (7. Juni 2005)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Fenster extends Frame implements ActionListener
{



public Fenster ()
{

super (" Lernpaket ");
Button one = new Button (" Test");
Button two = new Button (" Video");
Button three = new Button (" Test");
FlowLayout Buttons = new FlowLayout (FlowLayout.CENTER);
Panel pane = new Panel (Buttons);
pane.setLayout(Buttons);
Label L = new Label ("PROJEKT FA ST EM ");
add(pane);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
      dispose();
      System.exit(0);
}
});
one.addActionListener(this);
two.addActionListener(this);
three.addActionListener(this);

pane.add(L);
pane.add(one);
pane.add(two);
pane.add(three);
one.setBackground(Color.pink);
two.setBackground(Color.pink);
three.setBackground(Color.pink);
L.setFont (new Font ("Monospaced", Font.BOLD,30));
setSize (500, 200);
setBackground(Color.white);
setVisible (true);

}

public static void main(String arg[])
{
     new Fenster();
}

public void actionPerformed(ActionEvent e)
{
  if(e.getSource()==one)
 {
     try {
Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe Sample.mov");
} catch( IOException ex) {
// ...
} 
 }

}
```


hab es jetzt nicht getestet, aber das müsste funktionieren


----------



## fatmc (7. Juni 2005)

Danke! aber es ist immernoch die Fehlermeldung da : "cannot resolve symbol - variable one"


----------



## zerix (7. Juni 2005)

Klar, ich bin auch blöd

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Fenster extends Frame implements ActionListener
{

Button one = new Button (" Test");
Button two = new Button (" Video");
Button three = new Button (" Test");

public Fenster ()
{

super (" Lernpaket ");

FlowLayout Buttons = new FlowLayout (FlowLayout.CENTER);
Panel pane = new Panel (Buttons);
pane.setLayout(Buttons);
Label L = new Label ("PROJEKT FA ST EM ");
add(pane);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
      dispose();
      System.exit(0);
}
});
one.addActionListener(this);
two.addActionListener(this);
three.addActionListener(this);

pane.add(L);
pane.add(one);
pane.add(two);
pane.add(three);
one.setBackground(Color.pink);
two.setBackground(Color.pink);
three.setBackground(Color.pink);
L.setFont (new Font ("Monospaced", Font.BOLD,30));
setSize (500, 200);
setBackground(Color.white);
setVisible (true);

}

public static void main(String arg[])
{
     new Fenster();
}

public void actionPerformed(ActionEvent e)
{
  if(e.getSource()==one)
 {
     try {
Runtime.getRuntime().exec("C:\\Programme\\QickTime\\QuickTimePlayer.exe Sample.mov");
} catch( IOException ex) {
// ...
} 
 }

}
```


Die andere Klasse brauchste jetzt nicht mehr, nur noch diese eine


----------



## fatmc (7. Juni 2005)

yeah! danke zerix es funktioniert!  
also es funktionier den player zu öffnen , aber leider nicht das gewünschte video.
Wenn ich diese endung da mit " Sample.mov" lasse kommt eine fehlermeldung und es öffnet sich nichts. 
Aber sobald ich dieses dort lösche und somit nur noch die quicktime.exe dort stehen lasse öffnet sich der player! weisst du woran das liegen mag?
also wie kann ich direkt einene Film öffnen?


----------



## zerix (7. Juni 2005)

Wie ist denn die Fehlermeldung?


----------



## fatmc (7. Juni 2005)

Fehlermeldung:"Programmstart beenden ist nicht möglich, da die Datei nicht gefunden werden konnte."


----------



## zerix (7. Juni 2005)

Wo befindet sich denn die Sample.mov? Die datei muss im gleichen ordner sein wie die Class-Datei oder du musst auch den pfad angeben


----------



## fatmc (7. Juni 2005)

Super alles klar. Nun funktioniert es ganz! Ich danke dir sehr für deine Bemühungen und wünsch dir n schönen Abend! Vielen Dank


----------



## zerix (7. Juni 2005)

Vielen bitte 
ich helfe doch gern


----------



## qde (17. Februar 2006)

Hallo.
ja ich weiss der Thread ist ein halbes jahr alt. Aber ich möchte nun mal eine Frage stellen, die hier ganz gut rein passt:
Ich möchte eine Audiodatei (wave,mp3 oder ogg) über meine Java-Anwendung abspielen. Bisher habe ich nur Lösungen gefunden, die entweder mit Applets oder Oberflächenprogrammierung zusammenhängen gefunden. Ich möchte jedoch eine solche Datei aus einer "Consolenanwendung" (nennt man das so) abspielen lassen. 

Vielen Dank!


----------



## qde (17. Februar 2006)

Nach vielen Stunden gestern Nacht habe ich slebst eine Lösung gefunden. Vielleicht braucht das ja jemand von euch auch mal:

Player player;
        URL url = new URL("file://C:\\a.mp3");
        player = Manager.createPlayer(url);
        player.start();

Dazu müsst ihr das JMF (Java Media Framework) installiert haben.

Gruß Felix


----------

