2012-12-17 5 views
4

헤드리스 환경에서 실행되며 화면 대신 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

  • PaintManager에 대한

  • +0

    죄송합니다. com.mypapyri.clay.ui.App는 어떤 클래스를 확장합니까? – nidu

    +0

    'JPanel'을 확장합니다 (첫 번째 단락 참조). –

    +0

    [java docs] (http://docs.oracle.com/javase/6/docs/api/javax/swing/JPanel.html)의'JPanel' 메소드'getDisplay()'를 찾을 수 없습니다. 내가 뭘 잘못하고 있니?) – nidu

    답변

    1

    nidu 먼저 말했지만 그는 대답하지 않기 때문에 나는 그것을 넣어.

    아마도 생성자 메서드에서 super()를 호출하고 JPanel 생성자가 표시를 설정하기 전에 다시 페인팅하려고합니다.

    관련 문제