为什么从 Toolkit 获取屏幕尺寸会根据是否有 JFrame 产生不同的结果

Why getting screen size from Toolkit yields different results depending if there´s a JFrame or not

Code without frame

Code with frame

图像显示了 2 种不同的代码,所以我想知道为什么两种代码中的屏幕尺寸结果会因调用前是否创建 JFrame 而不同。

如图所示,当没有 JFrame 时 returns 与 returns 在调用时还没有创建 JFrame 时的结果不同,所以对这种现象的任何解释将不胜感激。

我无法验证您的代码,但这给出了预期的结果。始终相同的大小。

public class Test3  extends JFrame {
    static Dimension size = Toolkit.getDefaultToolkit().getScreenSize();

    public static void main(String[] args) {
        new Test3();
    }
    public Test3() {
        Dimension sc = Toolkit.getDefaultToolkit().getScreenSize();
        setSize(100,200);
        setVisible(true);
        sc = Toolkit.getDefaultToolkit().getScreenSize();
        System.out.println(sc);
        System.out.println(size);
    }

}

我没有任何问题。您可能想详细说明您的系统属性

没有框架...

import java.awt.Toolkit;

public class Test {

    static double screenWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    static double screenHeight = Toolkit.getDefaultToolkit().getScreenSize().getHeight();

    static double screenWidth2;
    static double screenHeight2;

    public static void main(String[] args) {
        new Test();

        System.out.println("screenWidth = " + screenWidth + " ~ " + screenWidth2);
        System.out.println("screenHeight = " + screenHeight + " ~ " + screenHeight2);
    }

    public Test() {
        screenWidth2 = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        screenHeight2 = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    }
}

输出...

screenWidth = 1792.0 ~ 1792.0
screenHeight = 1120.0 ~ 1120.0

有框架

import java.awt.Toolkit;
import javax.swing.JFrame;

public class Test2 extends JFrame {

    static double screenWidth = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    static double screenHeight = Toolkit.getDefaultToolkit().getScreenSize().getHeight();

    static double screenWidth2;
    static double screenHeight2;

    public static void main(String[] args) {
        new Test2();

        System.out.println("screenWidth = " + screenWidth + " ~ " + screenWidth2);
        System.out.println("screenHeight = " + screenHeight + " ~ " + screenHeight2);
    }

    public Test2() {
        screenWidth2 = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        screenHeight2 = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    }
}

产出

screenWidth = 1792.0 ~ 1792.0
screenHeight = 1120.0 ~ 1120.0

系统属性

  • OS:macOS卡特琳娜,10.15.4
  • Java: 11.0.1