Klasse in Klasse öffnen

sunmania

Mitglied
hallo,

ich hab eine Frameklasse erstellt und eine andere Klasse in einer anderen Datei. Diese ist:

import java.io.*;

public class playingAtoB {

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

Runtime.getRuntime().exec("mplayer -fs AnachB.avi");

}

}

Leider kann ich im Frame über den Befehl: new playingAtoB(); die Klasse nicht starten. Das Programm ist aber compilierbar.

Was ist mein Fehler ?

gruß

Jens
 
Hallo,

Der Fehler ist, dass du die Anweisung nicht im Constructor sondern in der main-Methode hast. Es müsste eher so sein:
Code:
public playingAtoB() throws IOException {
    Runtime.getRuntime().exec("mplayer -fs AnachB.avi");
}
allerdings brauchst du dafür nicht ein ganzes neues Objekt anlegen. Es reicht z.b. eine static-Methode zu nehmen:
Code:
public static play() throws IOException {
    Runtime.getRuntime().exec("mplayer -fs AnachB.avi");
}
die rufst du dann mit playingAtoB.play() auf.
 
ja ok, ich wollte das jetzt ausprobieren.

Da kommen folgende Fehler:

start.java:50:11: invalid method declaration; return type required
public playingAtoB() throws IOException {
^
start.java:54:19: invalid method declaration; return type required
public static play() throws IOException {
^
 
ja, sorry, es muss natürlich
Code:
public static void play() throws IOException {
    Runtime.getRuntime().exec("mplayer -fs AnachB.avi");
}
heißen.
Der erste ist der Contructor, der muss also genauso heißen wie die Klasse, aber du brauchst ja nicht beides, eins davon reicht.
 
hallo,

leider klappt da was immer noch nicht, wegen dem throws IOException. Er nimmt das nicht überall an, ich brauche das aber um das Programm auszuführen. Die Klasse soll aufgerufen werden, wenn ein Button betätigt wird.

Code:
Weiter.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        WeiterActionPerformed(evt);
      }
    });

so sieht das aus. Wenn man jetzt das throws IOException an public void actionPerformed(ActionEvent evt) anfügt kommt folgender Fehler:

B.java:51:19: actionPerformed(java.awt.event.ActionEvent) in cannot implement actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener; overridden method does not throw java.io.IOException
public void actionPerformed(ActionEvent evt)throws IOException {
^
Wie kann man das verhindern?

gruß
 
Hallo,

versuch es mal folgendermaßen, du kannst einen try-catch block einbauen...
das sieht dann in etwa so aus:

Code:
public void loeschActionPerformed(ActionEvent evt) {
   try {
      Runtime.getRuntime().exec("mplayer -fs AnachB.avi");
   }catch(IOException io) { /* Hier die Fehlerausgabe z.B. io.getMessage(); */ }
}

Gruss
 
Zuletzt bearbeitet:
hallo,

das funktioniert, aber die Probleme gehen weiter.

Ich hab jetzt folgenden Code:
Code:
public void WeiterActionPerformed(ActionEvent evt) {
    setVisible(false);
    try {
      Runtime.getRuntime().exec("mplayer -fs AnachB.avi");
   }catch(IOException io) { /* Hier die Fehlerausgabe z.B. io.getMessage(); */ }
    B frame = new B();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(960, 720);
    frame.setVisible(true);
  }

Der Befehl mplayer -fs AnachB.avi wird allerding erst ausgeführt, wenn ich das Fenster schließe
 
Soll er das Video innerhalb des neuen Frames abspielen?!
Dann würde ich eine eigene Methode innerhalb der B-Klasse erstellen z.b. play(); wie oben genannt und un dieser wird der try-catch block ausgeführt..

in deiner WeiterActionPerformed(); wird dann nur noch das B Frame erstellt und die methode aufgerufen mit
Code:
  B frame = new B();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(960, 720);
  frame.setVisible(true);
  frame.play();

Vielleicht funktioniert das, bin mir allerdings selber unsicher...

Gruß
 
Zurück