Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
@Override
public void keyTyped(KeyEvent e) {
}
};[/highlight]
Der Funktionsaufruf in der 3. Zeile verlangt eine Statische Methode. Diese Methode möchte ich aber nicht statisch machen. Wie muss ich das schreiben, damit die Methode nicht statisch sein muss?
@Override
public void keyPressed( KeyEvent e ) {
if (e.getKeyCode() == KeyEvent.VK_F5) {
myFunction();
}
// oder
if (e.getKeyCode() == KeyEvent.VK_F5) {
myClass2.myFunction();
}
}
private void myFunction() {
// TODO Auto-generated method stub
}
@Override
public void keyReleased( KeyEvent e ) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped( KeyEvent e ) {
// TODO Auto-generated method stub
}
}
package de.test;
public class MyClass2 {
public void myFunction() {
// TODO Auto-generated method stub
Du musst an der Stelle, wo du den Aufruf machen willst, das Objekt der Klasse haben, auf dem du den Aufruf machen willst. (Dort einfach "irgendein" neues Objekt dieser Klasse anzulegen, könnte nicht den erwünschten Effekt haben...)
was um Himmels Willen soll denn auch "MyClass.this" denn sein...
Du brauchst da eine konkrete Instanz der Klasse MyClass, worauf willst du denn sonst eine nicht statische methode aufrufen?
KeyListener listener = new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_F5) {
MyClass1.this.myMethod();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
};
public JLabel myLabel1 = new JLabel();
public void MyClass() {
//Fenster aufbauen und so
}
public void myMethod() {
myLabel1.setText("foo");
}
}
class MyClass2 extends Thread {
public void run() {
//Hier möchte ich die Methode myMethod aufrufen...
MyClass1.myMethod(); // --> Cannot make a static reference to the non-static method myMethod() from the type MyClass1
}
}[/highlight]
Bei "Hier möchte ich die Methode myMethod aufrufen..." ist das Problem...
Ich möchte myMethod nicht statisch machen, da sonst auch das Label statisch werden müsste.
Ja, dann musst du eben in der MyClass2 irgendwo eine referenz auf die Instanz der MyClass1 haben, da gibt's nun mal nicht so viele weitere möglichkeiten...
Okay. Diesmal gebe ich wirklich zu: ich habe nichts falsch gelesen, und ich habe auch nichts übersehen, und es ist mir absolut unklar, wie ich ohne diese Konstruktion solange ausgekommen bin. Es war mir in der tat nicht bekannt. Zweites Aschehäufchen auf mein Haupt für heute. (omg, ich schreibe heute den ganzen Tag irgendwelchen shice^^ )
Ja, dann musst du eben in der MyClass2 irgendwo eine referenz auf die Instanz der MyClass1 haben, da gibt's nun mal nicht so viele weitere möglichkeiten...