Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java Swing组件中劫持`repaint()`调用_Java_Swing_User Interface - Fatal编程技术网

在Java Swing组件中劫持`repaint()`调用

在Java Swing组件中劫持`repaint()`调用,java,swing,user-interface,Java,Swing,User Interface,我正在编写一个在无头环境中运行的应用程序,它需要输出到缓冲图像,而不是屏幕。我有一个Display类来管理buffereImage。我的应用程序扩展了JPanel,为了在组件更新时自动重新绘制,我将repaint()重新实现为: public void repaint(){ Graphics2D g = getDisplay().getGraphics(); paint(g); getDisplay().repaint(); } 然而,每当我启动我的应用程序时,当它试图

我正在编写一个在无头环境中运行的应用程序,它需要输出到
缓冲图像
,而不是屏幕。我有一个
Display
类来管理
buffereImage
。我的应用程序扩展了
JPanel
,为了在组件更新时自动重新绘制,我将
repaint()
重新实现为:

public void repaint(){
    Graphics2D g = getDisplay().getGraphics();
    paint(g);
    getDisplay().repaint();
}
然而,每当我启动我的应用程序时,当它试图绘制到
显示时,我会得到一个
NullPointerException
。这可能是
JPanel
构造函数中试图重新绘制的某些代码。问题是
getDisplay()
返回null。但是,
显示
已经实例化,并在此时传递给应用程序。我已经验证了这一点,在将其发送到应用程序之前,让
显示器在创建时打印出自己的属性

例外情况如下:;最上面的位置是指包含
getDisplay()
的行:

线程“main”java.lang.NullPointerException中的异常 位于com.mypapyri.clay.ui.App.repaint(App.java:28) 位于javax.swing.JComponent.setFont(JComponent.java:2746) 位于javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:208) 位于javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66) 位于javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56) 位于javax.swing.JComponent.setUI(JComponent.java:655) 位于javax.swing.JPanel.setUI(JPanel.java:153) 位于javax.swing.JPanel.updateUI(JPanel.java:126) 位于javax.swing.JPanel。(JPanel.java:86) 位于javax.swing.JPanel。(JPanel.java:109) 位于javax.swing.JPanel。(JPanel.java:117) 在com.mypapyri.clay.ui.App.(App.java:18) 在ClayOS。(ClayOS.java:22) 在ClayOS.main(ClayOS.java:84)
编辑:我对此进行了研究,但没有找到令人满意的解决方案

  • Javadocs
  • 油漆管理器和重新油漆管理器

nidu先说了,但既然他不回答,我就说了出来


可能您正在构造函数方法中调用super(),而JPanel构造函数正在设置显示之前尝试重新绘制。

对不起,但是哪个类会
com.mypapyri.clay.ui.App
extends?extends
JPanel
(请参见第一段)。我就是找不到方法
getDisplay()
用于中的
JPanel
。我做错了什么?)也许这是OP写的方法@奈杜塞也是。
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)