«Изменить модификатор« frame »на« static »» в Java - PullRequest
3 голосов
/ 26 мая 2011

Eclipse говорит мне, чтобы я изменил модификатор моей строковой переменной на static.Я не понимаю почему.Я думаю, что я все заявляю правильно, но я не уверен.Вот мой кодПроблема возникает в обеих строках 12 и 13.

import java.awt.*;
import javax.swing.*;
public class MainClass {


    Rectangle dot1 = new Rectangle(1,1), dot2 = new Rectangle(1,1);
    JFrame frame = new JFrame("Pythagorean Theorem");


    public static void main (String[] args){

        frame.setVisible(true);
        frame.setSize(500, 500);

    }


}

Ответы [ 2 ]

5 голосов
/ 26 мая 2011

frame - это переменная экземпляра MainClass, что означает, что вам нужен экземпляр MainClass для доступа к нему. Статическая переменная принадлежит классу и не требует экземпляра. Вообще говоря, вы должны избегать статического хранения вещей, поскольку их сложно модифицировать и тестировать.

Скорее создайте экземпляр MainClass в вашем методе main, а затем получите доступ к вашему фрейму внутри метода instance.

public class MainClass {
    Rectangle dot1 = new Rectangle(1,1), dot2 = new Rectangle(1,1);
    JFrame frame = new JFrame("Pythagorean Theorem");

    public void buildUI() {
        frame.setVisible(true);
        frame.setSize(500, 500);
    }

    public static void main (String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainClass().buildUI();
            }
        });
    }
}

РЕДАКТИРОВАТЬ Обратите внимание, что при работе с Swing, когда вы создаете / трогаете компоненты пользовательского интерфейса, вы должны сделать это в потоке диспетчеризации событий ( EDT ), что является invokeLater делает.

2 голосов
/ 26 мая 2011

Вы определяете frame как переменную экземпляра, но используете ее как статическую переменную. Есть два решения для этого:

1) Вы можете изменить модификатор фрейма на статический

2) Создайте экземпляр вашего класса, например:

public static void main (String[] args){
    MainClass mc = new MainClass();
    mc.frame.setVisible(true);
    mc.frame.setSize(500, 500);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...