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

zwyjn 2006-09-07 10:59:22
当我运行下面的程序时,出现标题出现的错误

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;

public class Main extends JFrame {

private static final long serialVersionUID = 1L;

private JPanel jContentPane = null;

private JLabel jLabel = null;

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {
public void run() {
Main thisClass = new Main();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}


public Main() {
super();
initialize();
}


private void initialize() {
Graphics g;
this.setSize(300, 200);
this.setContentPane(getJContentPane());
g=jContentPane.getGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, 20, 20);
this.setTitle("JFrame");
}


private JPanel getJContentPane() {
if (jContentPane == null) {

jLabel = new JLabel();
jLabel.setText("JLabel");
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(jLabel, BorderLayout.CENTER);

}
return jContentPane;
}

}


错误提示:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.zw.Main.initialize(Main.java:51)
at com.zw.Main.<init>(Main.java:38)
at com.zw.Main$1.run(Main.java:26)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
...全文
1201 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwyjn 2006-09-07
  • 打赏
  • 举报
回复
应该怎么样解决哪? package com.zw;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.*;

public class Main extends JFrame {

private static final long serialVersionUID = 1L;

private JPanel jContentPane = null;

private JLabel jLabel = null;


/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Main thisClass = new Main();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
thisClass.jContentPane.getGraphics().setColor(Color.black);
thisClass.jContentPane.getGraphics().fillRect(0, 0, 50, 50);


}
});
}

/**
* This is the default constructor
*/
public Main() {
super();
initialize();

}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {

this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");

}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {

jLabel = new JLabel();
jLabel.setText("JLabel");
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(jLabel, BorderLayout.CENTER);

}
return jContentPane;
}

}
这样的话问题可以解决,但是不能draw出图像~
千里冰封820 2006-09-07
  • 打赏
  • 举报
回复
这一看就知道是有对象没有经过初始化就被使 了
从程序可以看出,是你的Graphics对象没有初始化成功,也就是说
g=jContentPane.getGraphics();
返回的是null,而不是一个Graphics的引用

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧