2011-01-05 9 views
0

Je cherche à faire fonctionner la méthode showGUI(), le compilateur dit que "this" n'est pas une variable statique et ne peut pas être référencé à partir d'un contexte statique, aurais-je l'habitude de remplacer "ceci"? J'ai essayé test.main (test étant le paquet dans lequel il est). La raison pour laquelle j'utilise la méthode statique showGUI() est que j'ai besoin que la méthode soit appelée à partir d'une autre méthode statique, ainsi que de la méthode startup(). Voici mes deux classes principales.Comment remplacer "this" dans Java par quelque chose qui fonctionne

public class Main extends SingleFrameApplication { 

    @Override protected void startup() { 
     showGUI(); 
    } 

    @Override protected void configureWindow(java.awt.Window root) { 
    } 

    public static Main getApplication() { 
     return Application.getInstance(Main.class); 
    } 

    public static void main(String[] args) { 
     launch(Main.class, args); 

    } 

    public static void showGUI() { 
     show(new GUI(this)); 
    } 
} 

public class GUI extends FrameView { 

    public GUI(SingleFrameApplication app) { 
     super(app); 
     initComponents(); 
    } 
    private void initComponents() { 
     //all the GUI stuff is somehow defined here 
    } 
} 

Répondre

1

Si vous devez passer this à une autre fonction, par exemple le constructeur de GUI, vous avez besoin d'un objet, et showGUI est préférable de laisser comme méthode non statique:

@Override protected void startup() { 
    showGUI(); 
} 

public void showGUI() { 
    show(new GUI(this)); 
} 

Si vous avez vraiment besoin d'une méthode statique, vous avez besoin d'un objet à travailler sur:

public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    show(new GUI(main)); 
} 

ou encore mieux:

public static void createApplicationAndShowGUI() { 
    Main main = getApplication(); 
    main.startup(); 
} 

ou mieux encore, ne créent pas de méthode statique:

// in your context outside of the Main object 
Main main = Main.getApplication(); 
main.showGUI(); 
5

Eh bien, en utilisant this dans une méthode statique n'a pas de sens. this fait référence à l'instance particulière de la classe, mais static signifie qu'il s'agit d'une méthode qui ne nécessite pas d'instance et qu'elle n'a donc pas accès aux variables ou méthodes membres.

Il suffit de rendre showGUI non statique.

public void showGUI() { 
    show(new GUI(this)); 
} 
+0

puis ma méthode de plateau qui est statique ne peut pas l'utiliser –

+0

showGUI() est appelée par startup(), qui n'est pas statique. Vous ne montrez aucun exemple de code où vous l'appelez à partir d'un contexte statique. Vous devez nous dire ce que vous essayez de faire. Comme d'autres l'ont mentionné, vous pouvez créer une nouvelle instance en utilisant 'new Main()', même si avoir un appel de fonction 'showGUI' instancie réellement un nouvel objet Main peut être trompeur. – EboMike

0

'ceci' signifie 'objet courant'. Dans les méthodes statiques, il n'y a pas d'objet courant. Dans votre exemple, essayez de remplacer this par new Main().

+0

'showGUI' est déjà appelé par une méthode non statique. Pourquoi créer une nouvelle instance? – EboMike

+0

Parce que le PO a dit qu'il a besoin (ou pense qu'il a besoin) d'appeler showGUI dans un contexte statique. –

+0

ma méthode de plateau est statique et appelle la méthode lorsque l'utilisateur clique sur le bouton d'ouverture. –

Questions connexes