Klasse in ActionListener aufrufen

neuling-00

Grünschnabel
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
 
Moin,

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

BTW: und nutze bitte die Code-Tags !

Gruß
Klaus
 
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....

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


             }
             }

und hier nochmal die Matrix klasse:

Code:
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();
    }
}
 
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...!?

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


             }
             }

und hier nochmal die Matrix klasse:

Code:
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();
    }
}


Vielen dank schon mal im vorraus für die Hilfe
 
hmm, da Matrix runnable , dann würde ich doch mal vorschlagen, dass Du (genau wie Deiner Testklasse) den Thread auch wirklich startest

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

Gruß
Klaus
 
Oh vorsicht. Ein Thread wird nicht mit run gestartet sondern mit start(). run() ruft nur die run-Methode im selben Thread auf.
 
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?
 
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

Java:
new Thread(new Matrix()).start();
,

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

Java:
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.
 
Zurück