헤드리스 환경에서 실행되며 화면 대신 BufferedImage
에 출력해야하는 앱을 작성하고 있습니다. BufferedImage
을 관리하는 Display
클래스가 있습니다. 내 애플 JPanel
과 구성 요소 업데이트, 나는대로 repaint()
를 다시 구현했습니다 때 자동으로 다시 칠하기 위해 연장 : 내 응용 프로그램을 시작할 때마다Java Swing 구성 요소에서`repaint()`호출을 호출합니다.
public void repaint(){
Graphics2D g = getDisplay().getGraphics();
paint(g);
getDisplay().repaint();
}
는하지만, 내가 얻을 NullPointerException
가하려고 할 때 Display
으로 그립니다. 이것은 아마도 다시 그리기를 시도하는 JPanel
생성자의 코드 일 것입니다. 문제는 getDisplay()
이 null을 반환한다는 것입니다. 그러나 Display
이 이미 인스턴스화되어이 시점에서 앱에 전달되었습니다. 나는 앱에 보내기 전에 Display
이 자신의 속성을 출력 할 때이를 확인함으로써 이것을 확인했습니다.
예외는 다음과 같습니다. 맨 위의 위치는 getDisplay()
을 포함하는 행을 의미 :
Exception in thread "main" java.lang.NullPointerException
at com.mypapyri.clay.ui.App.repaint(App.java:28)
at javax.swing.JComponent.setFont(JComponent.java:2746)
at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:208)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66)
at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
at javax.swing.JComponent.setUI(JComponent.java:655)
at javax.swing.JPanel.setUI(JPanel.java:153)
at javax.swing.JPanel.updateUI(JPanel.java:126)
at javax.swing.JPanel.<init>(JPanel.java:86)
at javax.swing.JPanel.<init>(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:117)
at com.mypapyri.clay.ui.App.<init>(App.java:18)
at ClayOS.<init>(ClayOS.java:22)
at ClayOS.main(ClayOS.java:84)
편집 : 나는이 문제를 연구했고 만족스러운 해결책을 찾을 수 없습니다. Component
- The repaint() method and the GUI thread
- Javadoc과와의 RepaintManager
죄송합니다. com.mypapyri.clay.ui.App는 어떤 클래스를 확장합니까? – nidu
'JPanel'을 확장합니다 (첫 번째 단락 참조). –
[java docs] (http://docs.oracle.com/javase/6/docs/api/javax/swing/JPanel.html)의'JPanel' 메소드'getDisplay()'를 찾을 수 없습니다. 내가 뭘 잘못하고 있니?) – nidu