간단한 문제 : 저는 HDMI를 통해 TV에 연결 한 RaspPi3을 가지고 있으며, 전체 화면 (원격 클라이언트가 슬라이드 쇼로 간단한 텍스트를 보여주기 위해)에 Java Swing 응용 프로그램을 가지고 있습니다. 그러나 TV는 ~ 60 초 후에 대기 상태가되지만 앱이 작동중인 경우에만 대기합니다. TV를 단순히 표시하면 TV가 계속 살아있을 것입니다.Java Swing Window (전체 화면에서)가 Raspberry Pi 3의 HDMI 출력에 영향을 줍니까?
질문 : 전체 화면이 HDMI 신호로 어수선하게 흔들리지 않으므로 TV에서 더 이상 표시하고 종료 할 것이 없다고 생각합니까? (또는 텍스트를 표시하는 기능에 접근하는 방식에 문제가 있습니까? 아래 코드를 참조하십시오.)
신호가 동일하게 변하지 않거나 충분히 강하지 않기 때문에 TV에 문제가 있습니까? ~ 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);
}
}
}
}