2017-04-07 20 views
0

何らかの理由で、Screen.getPrimary().getVisualBounds().getWidth());を使用してラップトップの解像度幅を印刷すると、1920年の結果が正しく表示されます。ただし、解像度幅を印刷すると、解像度は1680x1050設定をして、1分待つようにスレッドに依頼し、同じコードを使用して解像度の幅を再度印刷すると、1680ではなく1920になります!しかし、私がプロジェクトを停止し、解像度を1680x1050に設定してから、プロジェクトをコンパイルして実行すると、1680が表示されます。つまり、プロジェクトの実行中にプロジェクトを変更しても、JavaFX 8プログラムの実行中に画面解像度が更新されない

以下は、私が意味するものを説明するためのJavaFXコードです。私は下のコードを実行する場合は、1920プリントを見て、実際に解像度を変更し、スレッドがスリープ状態になるまで待ってから、前述のように新しい解像度幅の代わりに1920を出力します。

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     System.out.println(Screen.getPrimary().getVisualBounds().getWidth()); 
     Thread.sleep(60000); 
     System.out.println(Screen.getPrimary().getVisualBounds().getWidth()); 
    } 
    public static void main(String[] args) { launch(args); } 
} 
+0

JavaFXの最新バージョンでこれを試しましたか? –

+0

私はJavaFX 8を使用していました(IntelliJは何らかの理由でJavaFX 2.0として参照しています)。コメントありがとう。私はそれに応じて私の質問を更新した。 – Max

答えて

0

問題は、同じスレッドで画面の解像度をポーリングすることと関係があります。新しいスレッドが作成され、ユーザーがWindowsの設定で画面の解像度を変更して画面の解像度を画面に表示するように指示されている間、スリープ状態になると、解像度には更新された解像度が反映されます。

スレッドがスリープしている間にユーザーが以下を実行して解像度を変更した場合、元の質問のコードとは異なり、正しい更新された解像度がスクリーンに印刷されます。

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     System.out.println(Screen.getPrimary().getVisualBounds().getWidth()); 
     new Thread(){ 
      public void run() { 
       try{ 
        this.sleep(30000); 
       } catch (InterruptedException e) { 
        // ignore 
       } 

System.out.println(Screen.getPrimary().getVisualBounds().getWidth()); 
      } 
     }.start(); 
    } 
    public static void main(String[] args) { launch(args); } 
} 

また、更新された画面解像度を反映する別の解決策は、AWTを使用することです。以下は、正しい更新された解像度を表示します。

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception { 

System.out.println(java.awt.Toolkit.getDefaultToolkit().getScreenSize()); 
     Thread.sleep(30000); 

System.out.println(java.awt.Toolkit.getDefaultToolkit().getScreenSize()); 
    } 
    public static void main(String[] args) { launch(args); } 
} 
関連する問題