【发布时间】:2017-12-03 13:14:51
【问题描述】:
简单的问题:我有一个 RaspPi3 连接到电视(通过 HDMI)和一个全屏的 java Swing 应用程序(远程客户端以幻灯片形式显示简单文本)。然而,电视会在大约 60 秒后进入待机状态,但前提是我的应用程序正在运行。如果我只是显示桌面,电视就会保持活力。
问题是:全屏摇摆应用程序是否会干扰 HDMI 信号,以致电视认为没有更多内容可显示并关闭? (或者我处理显示文本功能的方式有问题吗?见下面的代码*)
或者是电视有问题,因为信号保持不变并且没有变化,或者在大约 60 秒内不够强(“空白”空间过多,因为屏幕大部分是黑色的)?
注意:我的应用在纯粹的功能基础上确实按预期工作。这种待机行为是我没想到的“错误”。
我对 HDMI 规范没有那么深入的了解,所以如果有人能给我关于如何解决这个问题的提示,我将不胜感激。
这是我的第一个问题,我决定问它,因为我没有发现任何与我类似的问题。我不完全确定这个问题是否具体,所以如果是,我提前道歉。
*代码:
public GUIController()
{
Statics.GUIC = this;
jf = new JFrame("SP-MultiMonitor@arm " + 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);
}
}
}
}
【问题讨论】: