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
делает.