Java 我不断得到一个空错误,但我不知道如何设置g等于,使其工作

Java 我不断得到一个空错误,但我不知道如何设置g等于,使其工作,java,swing,graphics,java-2d,Java,Swing,Graphics,Java 2d,我有一个代码,我试图让图形在点击后显示,我试图找出如何做到这一点,但每次我尝试运行它,它给出了一个错误,我不知道如何修复它的工作 Exception in thread "main" java.lang.NullPointerException at memor.main(memor.java:131) Graphics g= pan.getGraphics(); 代码 当必须绘制组件时,JComponent中的Graphics对象将被初始化。这意味着您必须先渲染JPanel,然

我有一个代码,我试图让图形在点击后显示,我试图找出如何做到这一点,但每次我尝试运行它,它给出了一个错误,我不知道如何修复它的工作

Exception in thread "main" java.lang.NullPointerException
    at memor.main(memor.java:131)

Graphics g= pan.getGraphics();  
代码
当必须绘制组件时,
JComponent
中的
Graphics
对象将被初始化。这意味着您必须先渲染
JPanel
,然后才能访问
图形
对象

因此,您必须将
JPanel
添加到
JFrame
(或者可能是
JWindow
),将窗口设置为可见,然后才能使用组件的
图形
对象


无论如何,自定义图形应该覆盖
JPanel
paintComponent
方法。

Graphics g=pan.getGraphics()这不是正确的方法。此外,将自定义绘制与您想要的组件结合起来是很困难的。此外,对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。如果您只是选择忽略建议,我们为什么要麻烦您呢:。如果建议让你困惑,那么请在评论中要求澄清,但不要盲目忽视它,继续犯同样的错误,然后想知道为什么你的代码不起作用。这是我第三次看到这段代码,至少是第三次看到别人(包括我自己)尝试向您解释这不是您如何进行自定义绘制或处理
图形的方法。查看更多详细信息。投票关闭…“将窗口设置为可见,然后您将能够使用组件的图形对象。”但在该示例中,他们使用
图形
对象的确切方式是错误的,并且将在下一个
绘制(…)
中删除。很高兴看到你添加了第3段+1@AndrewThompson谢谢,我添加了第3段来说明这不是正确的方法,前两段基本上解决了获取空
图形
对象的问题,但正确的方法是使用
paintComponent
:)@andrewhompson:chit,她被告知所有这些,但却选择忽略这些建议。我想知道,为什么这些人甚至懒得问问题。他们是否打算一直问他们,直到听到他们想要的答案。。获取免费代码。。获得“最重复问题”奖(
import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;

import javax.swing.JButton;

public class memor extends JFrame
{
public static void main(String args[]){

final JPanel pan;
GridLayout h=new GridLayout(3,3);

pan =new JPanel(h);
JButton button1= new JButton("1");
pan.add(button1);
if (button1.isEnabled()){
Graphics g= pan.getGraphics();
g.setColor(new Color(156, 93, 82));
g.fill3DRect(21,3,7,12, true);
g.setColor(new Color(156,23,134));
g.fillOval(1,15,15,15);
g.fillOval(16,15,15,15);
g.fillOval(31,15,15,15);
g.fillOval(7,31,15,15);
g.fillOval(22,31,15,15);
g.fillOval(16,47,15,15);
}}
}