# Main-Methode aus anderer Klasse heraus starten



## Snaiper (6. Jan 2011)

Liebe Community,

Nach unzähligen Google-Versuchen steh ich jetzt kurz vor einem Anfall und vertrau einfach mal auf euer wissen xD
Mein Problem ist folgendes:

Ich habe eine GUI erstellt, die durch eine andere Klasse aufgerufen wird. Diese GUI soll jetzt beim Klick eines Buttons die main-Methode einer anderen Klasse aufrufen... Der Methodenkopf sieht aus wie folgt:


```
public static void main(String[] args) throws IOException, AWTException{
...
}
```

Wiegesagt will ich jetzt diese Methode von der GUI aus aufrufen, doch funktioniert das in keinster Weise... 
Fehlermeldung:



> main(java.lang.String[]) in KLASSE cannot be applied to()



Ich hoffe ihr könnt mir helfen.[DUKE]Help![/DUKE]

LG,
Snaiper


----------



## L-ectron-X (6. Jan 2011)

```
Klasse.main(null);
```
wenn du keine Argumente übergeben willst.

...sonst

```
Klasse.main(new String[] {"arg1", "arg2", "etc."});
```


----------



## Snaiper (6. Jan 2011)

Der Teil haut jetzt hin^^ Aber es folgt sogleich diese Fehlermeldung bei _KLASSE.main(null);_



> unreported exception java.io.IOException; must be caught or declared to be thrown



Setze ich nun 


> throws java.io.IOException


dran, bemängelt BlueJ gleich die zweite Zeile:


```
public void actionPerformed(ActionEvent evt){
        jButton1_ActionPerformed(evt);
      }
```
Die Fehlermeldung ist dieselbe wie schon oben genannt. Demzufolge habe ich _throws_ also auch hier in den Methodenkopf geschrieben, die dabei ausgegebene Fehlermeldung ist unten angehängt.

LG,
Snaiper


----------



## Murray (6. Jan 2011)

Wenn die Exception nicht deklariert werden kann, dann muss es eben die andere Alternative sein, die der Compiler als Lösungsmöglichkeit vorschlägt: ein try-catch-Block.


----------



## Snaiper (6. Jan 2011)

Vielen Dank für die schnellen Antworten, es klappt jetzt 

Eine Frage hätte ich dann aber noch:

Wenn ich auf einer grafischen oberfläche einen Button betätige, der eine while-Schleife in einer anderen Klasse ausführt, ist es mir ja normalerweise nicht möglich einen zweiten Button zu drücken, der z.B. eine andere Aktion ausführt.

=> Gibt es eine Möglichkeit, dass man während der Laufzeit der ersten Aktion eine zweite starten kann?

LG und danke nochmal,
Snaiper


----------



## Murray (7. Jan 2011)

Normalerweise sollte man niemals lang laufende Aktionen direkt aus dem Thread heraus starten, in dem die Event-Behandlung erfolgt, denn sonst gibt es genau den von Dir beobachteten Effekt: die Oberfläche friert quasi ein und ist erst dann wieder bedienbar, wenn die Aktion beendet ist.
Daher lässt man beim Klick auf den Button die lang laufende Aktion in einem anderen Thread laufen; so ist das GUI gleich wieder bedienbar, auch wenn die Aktion noch nicht beendet ist.


----------



## Snaiper (7. Jan 2011)

Klingt logisch...

Und wie würde dafür dann der Code aussehen? 

>Versuche mein Schulinformatik aufzubessern xD

LG,
Snaiper


----------



## Murray (7. Jan 2011)

Z.B. so:

Statt eine Methode direkt aufzurufen

```
public void actionPerformed(ActionEvent evt){
        doSomething(evt);
      }
```

kann man sie in einem eigenen Thread ausführen lassen:

```
public void actionPerformed(final ActionEvent evt){
        new Thread( new Runnable(){
          public void run() {
            doSomething(evt);
          }
        }).start();
      }
```


----------



## Snaiper (7. Jan 2011)

Super, danke für die rasche Hilfe


----------

