在Java中“将\'frame\'的修饰语更改为\'static\'”

| 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);

    }


}
    
已邀请:
您正在将“ 1”定义为实例变量,但将其用作静态变量。有两种解决方案: 1)您可以将框架的修改器更改为静态 2)创建您的类的实例,如下所示:
public static void main (String[] args){
    MainClass mc = new MainClass();
    mc.frame.setVisible(true);
    mc.frame.setSize(500, 500);
}
    
frame
是MainClass的实例变量,这意味着您需要MainClass的实例才能访问它。静态变量属于该类,不需要实例。一般来说,您应该避免静态存储内容,因为它们很难修改和测试。 而是在您的main方法中创建MainClass的实例,然后在实例方法中访问您的框架。
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时,创建/触摸UI组件时,需要在事件分配线程(EDT)上执行此操作,即ѭ5所做的事情。     

要回复问题请先登录注册