Что делает этот контекст статичным? А что делать? - PullRequest
1 голос
/ 26 апреля 2011

Я только начал изучать Java, и у меня возникли проблемы со статическим / нестатическим.Проблема с моим кодом находится в пределах actionlistener.Когда я пытаюсь скомпилировать его, он говорит: на

нельзя ссылаться на нестатический метод из статического контекста.

Правильно ли я считаю, что выполненное действиестатические?Если так, как я могу использовать actionlistener для выполнения метода?(Мне хорошо известно, что я мог бы просто поместить текст в своем коде в actionlistener. Но если бы у меня были другие обстоятельства ...)

 public class But extends JFrame{
    public void test(){
        //A method
        System.out.println("Testing");
    }
}

class TestListener implements ActionListener{
    public TestListener(){}
    public void actionPerformed(ActionEvent e) {
        But.test(); 
}}

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

test() в But - это метод экземпляра (нестатический), но вы пытаетесь получить к нему доступ, как будто он статический.

Попробуйте

class TestListener implements ActionListener{
    private But but = new But();
    public TestListener(){}
    public void actionPerformed(ActionEvent e) {
        but.test(); 
}}

или если вы намереваетесьчтобы сделать test(), измените его подпись на

public static void test(){
1 голос
/ 26 апреля 2011

Ваш TestListener должен знать, на какую кнопку вызывать метод .test().Поэтому попробуйте:

class TestListener implements ActionListener {
    private final But but;
    public TestListener(But b) {
        but = b; // save the instance of But that we want to call
    }
    public void actionPerformed(ActionEvent e) {
        but.test(); 
    }
}

Это изменит конструктор TestListener на экземпляр But и сохранит его внутри в поле but.Затем, когда действие выполнено, можно вызвать метод .test().

Вам необходимо соответствующим образом изменить вызов конструктора TestListener.

0 голосов
/ 26 апреля 2011
But.test(); 

Вам необходимо создать экземпляр класса «Но».Вы вызываете его здесь так, как если бы это был статический (класс) метод, в отличие от нестатического (экземпляр) метода.

Возможно, просто опечатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...