Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;更改'的修饰符;框架';至';静态'&引用;在爪哇_Java_Static_Jframe - Fatal编程技术网

Java &引用;更改'的修饰符;框架';至';静态'&引用;在爪哇

Java &引用;更改'的修饰符;框架';至';静态'&引用;在爪哇,java,static,jframe,Java,Static,Jframe,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("Pythag

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

    }


}

frame
是MainClass的实例变量,这意味着您需要MainClass的实例才能访问它。静态变量属于类,不需要实例。一般来说,您应该避免静态存储东西,因为它们很难修改和测试

而是在主方法中创建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组件时,您需要在事件调度线程()上执行此操作,
调用器
就是这样做的。

您将
定义为实例变量,但将其用作静态变量。有两种解决方案:

1) 可以将“帧”的修改器更改为“静态”

2) 创建类的实例,如下所示:

public static void main (String[] args){
    MainClass mc = new MainClass();
    mc.frame.setVisible(true);
    mc.frame.setSize(500, 500);
}

这不会有好结果的。事件分派线程上没有任何操作。
Eclipse告诉我将字符串变量的修饰符更改为static
——请理解Java/Eclipse没有告诉您这一点。相反,它告诉您不能对非静态变量或方法进行静态引用。这是一个很大的区别。这一点很重要的原因是,这样你就不会误解错误,因为它不会告诉你让变量保持静态,我们也不会。