【问题标题】:NullPointerException using Graphics2D in custom JPanelNullPointerException 在自定义 JPanel 中使用 Graphics2D
【发布时间】:2010-03-10 16:12:48
【问题描述】:

我正在扩展 JPanel 以制作自定义绘图面板,但收到 NullPointerException 并且无法找出原因。我已经删除了代码,直到它非常裸露,但错误仍在发生。

package testdraw;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JPanel;

public class DrawPanel extends JPanel {

    public DrawPanel() {
        this.Draw();
    }

    public void Draw(){
        Graphics g = this.getGraphics();
        Graphics2D g2d = (Graphics2D) g;

        RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        rh.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_SPEED);

        g2d.setRenderingHints(rh);
    }
}

我收到了错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

从我调用setRenderingHints 方法的那一行开始。任何帮助表示赞赏。

【问题讨论】:

    标签: java exception jpanel


    【解决方案1】:

    null 来自当你调用Graphics g = this.getGraphics(); 正如保罗所说,你不应该在构造函数中调用它,因为面板还不存在。将此代码放在重写的 paintComponent() 方法中可能会更好

    【讨论】:

    【解决方案2】:

    您在构造函数中调用“Draw”。在调用 getGraphics 之前,您应该等到它完全构建并可见。

    【讨论】:

    • 谢谢,我应该猜到了。
    • 很抱歉,但这不仅仅是在构造函数中调用 draw 的问题。而是您的绘制方法不符合 Swing 框架行为的事实。有关详细信息,请参阅我的答案。
    • @Riduidel,我说的非常准确。我没有告诉他从哪里调用他的 Draw() 方法,但是告诉他不要从构造函数调用它并没有错。
    • 是的,你在写,在构造函数中调用draw方法显然是错误的。但是,当在容器外部调用时,此方法可能会导致 NullPointerException,因为据我所知,组件持有的 Graphics 仅在组件可显示时才设置,正如组件 javadoc 所述 (java.sun.com/j2se/1.5.0/docs/api/java/awt/…)。而且,考虑到这个 Draw 方法与 Swing 框架完全不相关这一事实,@VirtualMe 可能会调用它而不会使组件可显示。
    【解决方案3】:

    通常,draw方法不是由面板本身调用的,而是从Java2D框架调用的。因此,它不是没有参数的 Draw() 方法,而是paint(Graphics g) 方法。 在这种情况下,Graphics 永远不会为空,并且始终是 graphics2D(就您使用 Java2 VM 而言)。

    【讨论】:

    • 很抱歉,他将自己的方法称为“Draw”有什么意义?只要他在 JPanel 可见后调用它,他就可以将其称为“FooBarBlatz”。
    • 是的,确切地说,但在这种情况下,将 Draw 方法与绘图方法分开不仅没有用,而且容易出错(在我看来)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2014-04-19
    • 2011-09-17
    • 2016-12-09
    • 2018-02-25
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多