# Klasse in ActionListener aufrufen



## neuling-00 (6. Januar 2010)

hi Leute...

Ich hab hier ein Problem...ich will in meinem ActionListener eine Klasse aufrufen.
eigentlich müsste das ja funktionieren:
bla = new bla();
aber leider funktioniert es nicht....

Kann mir bitte jmd helfen....

hier ist der actionListener...

 public class MultListener implements ActionListener{
             public void actionPerformed(ActionEvent b) {
                Matrix m= new Matrix();
                  }
             }

und die Klasse Matrix soll aufgerufen werden..aber funktioniert nicht...

bitte help


----------



## vfl_freak (6. Januar 2010)

Moin,

was genau funktioniert nicht - sprich: welche Fehlermeldung bekommst Du denn 

BTW: und nutze bitte die Code-Tags !

Gruß
Klaus


----------



## neuling-00 (6. Januar 2010)

Ich bekomme keine Fehlermeldung..leider..
Die klasse die ich aufrufe läuft einfach nicht...denn wenn sie laufen würde, würde eine JOptionPane aufgehen....


```
public class MultListener implements ActionListener{
             public void actionPerformed(ActionEvent b) {
                 Matrix m = new Matrix();


             }
             }
```

und hier nochmal die Matrix klasse:


```
package wi2;

import java.text.SimpleDateFormat;
import java.util.Random;
import javax.swing.JOptionPane;

public class Matrix implements Runnable{
public void run() {
    try {
      int n =1000;
      int i, j,k;
      //Zufallszahlengenerator
      Random r = new Random();

      //deklaration der Matritzen
      int a[][] = new int[n][n];
      int b[][] = new int[n][n];
      int c[][] = new int[n][n];


      //Füllen der Matrizen
      for(i = 0; i < n; i++) {
        for(j = 0; j < n; j++) {
          a[i][j] = r.nextInt();
          b[i][j] = r.nextInt();
        }
      }
      System.out.println("START:");
      final long startZeit = System.currentTimeMillis();

      //Multiplikation der Matritzen
      for(i = 0; i < n; i++) {
        for(j = 0; j < n; j++) {
          for(k = 0; k < n; k++) {
            c[i][j] += a[i][k] * b[k][j];
          }
        }
      }

       long endZeit = System.currentTimeMillis();
       long zeit= endZeit - startZeit;

       SimpleDateFormat sdfTime = new SimpleDateFormat();
       sdfTime.applyPattern("mm:ss");

      System.out.println("Programmdurchlaufdauer auf Ein Prozessormaschine beträgt:" +
              " "+zeit+" ms." +
              "In Minuten : " +sdfTime.format(zeit));

//      System.out.println(sdfTime.format(zeit));
    }
    catch (Exception ex){
      System.out.println("Fehler beim Ausführen");
    }
   }
  }
class testlauf{
    public static void main(String []args){
        Runnable threadJob = new Matrix();
        Thread meinThread = new Thread(threadJob);

        meinThread.start();
    }
}
```


----------



## neuling-00 (6. Januar 2010)

neuling-00 hat gesagt.:


> Ich bekomme keine Fehlermeldung..leider..
> Die klasse die ich aufrufe läuft einfach nicht...denn wenn sie laufen würde müsste bei der Ausgabe etwas steht...aber nix..
> Voll komisch...wenn ich eine Klasse mit jFrame aufrufe, funktioniert es...aber so...!?
> 
> ...




Vielen dank schon mal im vorraus für die Hilfe


----------



## vfl_freak (6. Januar 2010)

hmm, da _Matrix_ *runnable* , dann würde ich doch mal vorschlagen, dass Du (genau wie Deiner Testklasse) den Thread auch wirklich startest


```
public class MultListener implements ActionListener
{
    public void actionPerformed( ActionEvent b ) 
    {
        Matrix m = new Matrix();
        m.run(); // ! ! !
    }
}
```

Gruß
Klaus


----------



## neuling-00 (6. Januar 2010)

oh mann...


Klar...sowas von logisch oder
Man sollte halt weiterdenken können (vorallem ich)

Vielen vielen Dank...


----------



## zeja (6. Januar 2010)

Oh vorsicht. Ein Thread wird nicht mit run gestartet sondern mit start(). run() ruft nur die run-Methode im selben Thread auf.


----------



## neuling-00 (6. Januar 2010)

ok?
Leider hab ich das jetzt nicht verstanden..wie der name schon sagt...neuling-00..

also sollte ich m.start();?

aber das funktioniert nicht..
in der Matrix Klasse rufe ich in der Main -Methode die start() auf...

läuft das Program nicht als Thread?


----------



## Kai008 (6. Januar 2010)

Wenn du eine Klasse intialisierst wird der Konstruktor (Methode ohne Rückgabewert mit selben Namen wie Klasse) abgearbeitet. Du hast den Startbefehl aber in eine andere Methode einer anderen Klasse (deren Namen man groß schreibt) geschrieben. Diese wird aber nirgends aufgerufen.

Also entweder schreibst du im ActionListener eben


```
new Thread(new Matrix()).start();
```
,


```
testlauf.main(null);
```
oder fügst folgendes am Anfang der Klasse Matrix ein:


```
public Matrix()
{
	new Thread(this).start();
}
```
und setzt diese final.

Aber warum erbst du nicht gleich von Thread? Kommt auf das selbe raus, nur dass du nicht gleich noch eine Instance anlegen musst.


----------

