2017-12-03 6 views
0

シンプルな問題:私はRaspPi3を(HDMIを介して)テレビに接続し、その上でフルスクリーン(リモートクライアントはスライドショーとしてシンプルなテキストを表示する)でアプリケーションをスイングします。しかし、テレビは〜60秒後にスタンバイ状態になりますが、アプリが動作している場合にのみ待機します。私はテレビを単に表示するだけでテレビは生きている。Javaスイングウィンドウ(フルスクリーン)は、Raspberry Pi 3のHDMI出力に影響しますか?

質問:テレビでは、フルスクリーンのスイングアプリがHDMI信号を混乱させるので、テレビに何も表示されずにシャットダウンするとは思われません。 (または、テキストを表示する機能に近づく方法に何か問題がありますか?)

また、信号が同じで変化しないか、十分に強くないためにテレビに問題がありますか〜60秒(画面がほとんど黒であるために余分な "空白"スペース)?

注:私のアプリは、機能的に純粋に機能します。このスタンバイ動作は、私が期待していなかった「バグ」です。

私はHDMI仕様の深い洞察を持っていないので、誰も私にこの問題を解決する方法のヒントを与えることができたら、私はそれを感謝します。

これは私の最初の質問です。私はそれに似た問題が見つかりませんでしたので、質問しました。私はこの質問が具体的なものかどうかは完全にはわかっていないので、もしあれば、事前に謝罪します。

*コード:

public GUIController() 
    { 
     Statics.GUIC = this; 
     jf = new JFrame("[email protected] " + Statics.VERSION_INFOS); 
     jf.setUndecorated((Statics.PROPERTIES.getProperty("p.undecorated").equals("true"))); 
     jf.setAlwaysOnTop(true); 
     jf.setLocation(Integer.parseInt(Statics.PROPERTIES.getProperty("p.pos.x")), Integer.parseInt(Statics.PROPERTIES.getProperty("p.pos.y"))); 
     jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     Container cp = jf.getContentPane(); 
     MyCanvas tl = new MyCanvas(); 
     tl.setBackground(Color.BLACK); 
     cp.add(tl); 
     cp.setBackground(Color.BLACK); 
     jf.setSize(Integer.parseInt(Statics.PROPERTIES.getProperty("p.width")), Integer.parseInt(Statics.PROPERTIES.getProperty("p.height"))); 
     jf.setVisible(true); 
     t = 0; 

     timer = new Timer(100, new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       //check cmd 
       switch (Statics.PRESENTATION_CMD) 
       { 

        case Statics.REND_CMD_EMPTY: 

         Statics.PRESENTATION_CMD = Statics.REND_CMD_RUN; 
         break; 

        case Statics.REND_CMD_RUN: 
         break; 

        case Statics.REND_CMD_START: 
         tl.repaint(); 
         Statics.PRESENTATION_CMD = Statics.REND_CMD_RUN; 
         break; 

        case Statics.REND_CMD_STOP: 
         Statics.PRESENTATION_CMD_ADD = null; 
         tl.repaint(); 
         Statics.PRESENTATION_CMD = Statics.REND_CMD_EMPTY; 
         break; 

        case Statics.REND_CMD_NEXT: 

         Statics.PRESENTATION_CMD = Statics.REND_CMD_RUN; 
         break; 

        case Statics.REND_CMD_PREV: 

         Statics.PRESENTATION_CMD = Statics.REND_CMD_RUN; 
         break; 

        case Statics.REND_CMD_GOTO: 

         Statics.PRESENTATION_CMD = Statics.REND_CMD_RUN; 
         break; 
       } 
      } 
     }); 

     jf.addWindowListener(new WindowListener() 
     { 
      @Override 
      public void windowOpened(WindowEvent e) 
      { 
      } 

      @Override 
      public void windowClosing(WindowEvent e) 
      { 
       timer.stop(); 
      } 

      @Override 
      public void windowClosed(WindowEvent e) 
      { 
      } 

      @Override 
      public void windowIconified(WindowEvent e) 
      { 
      } 

      @Override 
      public void windowDeiconified(WindowEvent e) 
      { 
      } 

      @Override 
      public void windowActivated(WindowEvent e) 
      { 
      } 

      @Override 
      public void windowDeactivated(WindowEvent e) 
      { 
      } 
     }); 
     timer.setInitialDelay(1000); 
     timer.start(); 
    } 

    public void toggleVisibility() 
    { 
     jf.setVisible(!jf.isVisible()); 
    } 
} 

class MyCanvas extends JComponent 
{ 

    int fontSize = 50; 
    Font font = new Font("Calibri", Font.PLAIN, fontSize); 

    @Override 
    public void paintComponent(Graphics g) 
    { 
     if (g instanceof Graphics2D) 
     { 
      Graphics2D g2 = (Graphics2D) g; 
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

      if (Statics.PRESENTATION_CMD_ADD == null && Connection.getInstance().hasConnected()) 
      { 
       g2.setColor(Color.GREEN); 
       g2.setFont(font); 

       g2.drawString("connected", 50, 50); 
       return; 
      } 
      else if (Statics.PRESENTATION_CMD_ADD == null) 
      { 

       g2.setColor(Color.GREEN); 
       g2.setFont(font); 

       g2.drawString("not connected", 50, 50); 
       return; 
      } 

      String[] content = Statics.PRESENTATION_CMD_ADD.split(Statics.STRING_LIMITER_HASH); 

      g2.setColor(Color.WHITE); 
      g2.setFont(font); 
      for (int i = 0; i < content.length; i++) 
      { 
       g2.drawString(content[i], 50, fontSize + fontSize * i + 10); 
      } 
     } 
    } 
} 

答えて

0

私はコメントすることはまだ十分な評判を持っていないので、答えとして投稿する必要があります。

私はあなたのコードを見たことはありませんでしたが、Piで作業しているときに同様の問題が起きていました。イメージオーバーレイ(デジタルサイネージ)でビデオを表示していました。私は、画面が黒くなり、最終的にタイムアウトして画面がスタンバイになる前に、私はフルスクリーンになったときに私は画像のちらつきを取得します。

これは、hdmiバッファなどの問題であることが判明しました。私は実際に私の問題を解決したことはない、私はちょうどラズベリーパイの限界を打ったと思う。

解決策を無効にしていたのは何ですか。私はhdmiモードを34に変更したと思います。これは30hzで1920x1280pを与え、60hzに反対し、本質的にバッファを2倍にしました。品質はわずかに低下しましたが、ほとんど目に見えませんでした。

申し訳ありません私はより多くの助けができません、ちょうどあなたが正しい方向にあなたを振る舞う場合に私の2セントを追加すると思った。

関連する問題