java 不能调用其他类中的非静态方法[重复]

ivqmmu1c  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(176)
    • 此问题在此处已有答案**:

"Non-static method cannot be referenced from a static context" error(4个答案)
3小时前关门了。
我正在尝试创建一个类,它获取我的虚拟Android屏幕的尺寸,然后在终端中打印宽度和高度。
ScreenDimensions.java:

class ScreenDimensions {

    Context context;
    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    WindowMetrics metrics = windowManager.getMaximumWindowMetrics();
    Rect bounds = metrics.getBounds();
    private int dWidth = bounds.width();
    private int dHeight = bounds.height();

    public void showDisplayDimensions() {
            Log.i("DISPLAY HEIGHT", String.valueOf(dWidth));
            Log.i("DISPLAY WIDTH", String.valueOf(dHeight));
        }

}

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        ScreenDimensions.showDisplayDimensions();

        setContentView(new Menu(this));

    }
}

它说非静态方法(showDisplayDimensions)不能从静态上下文引用,但我不明白为什么我的MainActivity类被认为是静态的。

hfyxw5xn

hfyxw5xn1#

静态方法属于类,而不是示例,因此在调用ScreenDimensions.showDisplayDimensions();时,它会看到ScreenDimensions是一个类,因此应该是一个名为showDisplayDimensions()的静态方法。
若要调用对象上的方法,需要类ScreenDimensions的示例对onCreate方法可见。
通常,您需要创建示例,或者访问示例,因此:

setContentView(R.layout.activity_main);
        
        ScreenDimensions screenDim=new ScreenDimensions();
        screenDim.showDisplayDimensions();

        setContentView(new Menu(this));

会是个解决办法。

yebdmbv4

yebdmbv42#

看一看如何在JAVA中使用静态方法https://www.geeksforgeeks.org/static-method-in-java-with-examples/
看起来您使用showDisplayDimensions方法时好像它是一个静态方法,但实际上它不是。如果要使用此方法,您需要示例化类ScreenDimensions的一个对象。

ScreenDimensions object = new ScreenDimensions();
object.showDisplayDimensions();

相关问题