求助 画图软件参数传递的问题

CHIMEer 2017-01-23 12:09:47
写的是一个画图程序,现在的报错是这样一长串:


报错的地方是在监听器中的这行代码: g.setColor(cb.co);
我看网上说 java.lang.NullPointerException 这个错误多是对象未初始化,但我在一开始的窗口中实例化了ColorBoard类,下面这个是窗口部分的代码:


我将实例化的ColorBoard类作为参数传递到DrawBoard类中
下面是ColorBoard类的全部代码,主要用来设置颜色,在这里声明了co:

以及DrawBoard类的全部代码,主要用来设置画笔,在这里将得到的cb再传递到监听器中:


现在是我在画图程序中的画布上拖动鼠标就会报错,报错的地方时位于监听器类中的设置颜色部分,请问是我在传递参数的过程中出现错误了吗?还是因为其他的原因呢?
下面是监听器DrawListener类的全部代码:




...全文
210 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oO临时工Oo 2017-01-23
  • 打赏
  • 举报
回复
DrawBoard.java第28行,Graphics g = pannel.getGraphics(); 这个g是空的 DrawBoard.java第31行,dl.setGraphics(g);这个g的值是null。 因为在一个Component组件被增加到父窗口之前,通过getGraphics()方法返回的数据是空的 举个下面例子
public class TJApplet extends Applet{
	@Override
	public void start() {
		super.start();

		JPanel p = new JPanel();
		Graphics g = p.getGraphics();
		System.out.println(g); //输出null
		
		this.add(p);//关键在这里

		g = p.getGraphics();
		System.out.println(g);//输出非null
	}
}
相信你能看懂
CHIMEer 2017-01-23
  • 打赏
  • 举报
回复
引用 3 楼 trocp 的回复:
同样的道理。DrawBoard也是一个Panel,此刻他也没有被add到任何父容器。所以同理DrawBoard中所有组件的getGraphics()方法都会返回为空,只有当一个Panel的parent、prarent prarent、prarent prarent prarent.....add到一个可用于显示的组件(比如Frame),那么getGraphics()的返回才有效。 分析你的代码:MainBoard.java 32行 先在new DrawBoard(),立即 .getGraphics(),然后DrawBoard才被add到MainBoard这个Frame中。 明白什么原因了么?
非常感谢,现在终于明白了
oO临时工Oo 2017-01-23
  • 打赏
  • 举报
回复
同样的道理。DrawBoard也是一个Panel,此刻他也没有被add到任何父容器。所以同理DrawBoard中所有组件的getGraphics()方法都会返回为空,只有当一个Panel的parent、prarent prarent、prarent prarent prarent.....add到一个可用于显示的组件(比如Frame),那么getGraphics()的返回才有效。 分析你的代码:MainBoard.java 32行 先在new DrawBoard(),立即 .getGraphics(),然后DrawBoard才被add到MainBoard这个Frame中。 明白什么原因了么?
CHIMEer 2017-01-23
  • 打赏
  • 举报
回复
引用 1楼oO临时工Oo 的回复:
DrawBoard.java第28行,Graphics g = pannel.getGraphics(); 这个g是空的 DrawBoard.java第31行,dl.setGraphics(g);这个g的值是null。 因为在一个Component组件被增加到父窗口之前,通过getGraphics()方法返回的数据是空的 举个下面例子
public class TJApplet extends Applet{
	@Override
	public void start() {
		super.start();

		JPanel p = new JPanel();
		Graphics g = p.getGraphics();
		System.out.println(g); //输出null
		
		this.add(p);//关键在这里

		g = p.getGraphics();
		System.out.println(g);//输出非null
	}
}
相信你能看懂
我试着在第28行后写了句System.out.println(g); 输出的结果确实是null,但我在第26行有写this.add(panel);已经在调用getGraphics()方法前将panel添加到父窗口中,请问为什么输出还是null呢?

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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