首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java Swing组件中的Hijack ``repaint()‘调用

Java Swing组件中的Hijack ``repaint()‘调用
EN

Stack Overflow用户
提问于 2012-12-17 19:05:26
回答 1查看 184关注 0票数 4

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

代码语言:javascript
运行
复制
public void repaint(){
    Graphics2D g = getDisplay().getGraphics();
    paint(g);
    getDisplay().repaint();
}

不过,每当我启动我的应用程序时,我就会得到一个NullPointerException,当它试图绘制到Display时。据推测,这是JPanel构造函数中试图重新绘制的一些代码。问题是getDisplay()返回null。然而,Display已经被实例化并传递给应用程序了。我已经验证了这一点,让Display在创建时打印出自己的属性,然后再发送到应用程序。

异常如下所示:最上面的位置是指包含getDisplay()的行

代码语言:javascript
运行
复制
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)

编辑:,我对此进行了研究,但没有找到令人满意的解决方案。

  • repaint()方法和GUI线程
  • 用于组件的Javadocs
  • PaintManager和RepaintManager
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-17 20:01:37

nidu先说了,但因为他不接,我就说了。

可能是在构造函数方法中调用super(),并且JPanel构造函数试图在设置显示之前重新绘制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13920447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档