新手学JAVA,出现异常,望解决,谢谢Exception in thread "main" java.lang.NullPointerException

自己新开始学JAVA,然后遇到如下问题,关于自定义类的使用,功能是出现窗口,窗口中出现着色矩形。下面一个是主程序:
import java.io.*;
import java.awt.*;
import javax.swing.*;

public class SeeingDouble{
//main():应用程序入口
public static void main(String args[])throws IOException{
ColoredRectangle r = new ColoredRectangle();

System.out.println("Enter when ready");
System.in.read();

r.paint();

//改变变量值
r.setY(60);
r.setColor(Color.GREEN);

//显示变值之后的矩形
r.paint();

//再次设置矩形
ColoredRectangle w = new ColoredRectangle();
JFrame display = new JFrame("ewrhsjdhsa");
w.ColoredRectangle(45,78,50,50,display,Color.RED);
w.paint();//提示这行有问题
}
}

下面的是自定义类:
import javax.swing.*;
import java.awt.*;

public class ColoredRectangle{
//描述对象的实例变量
private int width;
private int height;
private int x;
private int y;
private JFrame window;
private Color color;

//ColoredRectangle();默认构造器
public ColoredRectangle(){
window = new JFrame ("BOX FUN");
window.setSize(200,200);
window.setLocationRelativeTo(null); //窗口置于屏幕中央
width = 40;
height = 20;
x = 80;
y = 90;

color = Color.BLUE;

window.setVisible(true);
}

//paint():在窗口中显示矩形
public void paint (){
Graphics g = window.getGraphics();
g.setColor(color); //提示这行有问题
g.fillRect(x,y,width,height);
}

//setWidth():宽度修改方法
public void setWidth(int w){
width = w;
}

//setHeight():高度修改方法
public void setheight(int h){
height = h;
}

//setX():X坐标修改方法
public void setX(int ulx){
x = ulx;
}

//setY():Y坐标修改方法
public void setY(int uly){
y = uly;
}

//setWindow():窗口修改方法
public void setWindow(JFrame f){
window = f;
}

//setColor():颜色修改方法
public void setColor(Color c){
color = c;
}

//ColoredRectangle():特定构造器(一步到位)
public void ColoredRectangle(int w,int h,int ulx,int uly,JFrame f,Color c){
setWidth( w);
setheight( h);
setX( ulx);
setY( uly);
setWindow( f);
setColor( c);
}

}

提示有错的行我已经注释了,异常就是“Exception in thread "main" java.lang.NullPointerException”。希望高手能帮帮我这个菜鸟,谢谢,10分不多。
异常:Exception in thread "main" java.lang.NullPointerException
at ColoredRectangle.paint(ColoredRectangle.java:34)
at SeeingDouble.main(SeeingDouble.java:26)

原因:在public void ColoredRectangle方法中传入的JFrame f的visible属性是false,所以在public void paint方法中得到的Graphics g = window.getGraphics()是野嫌厅null,所以颂隐会报空指针异常

解决:在传入之前设置display.setVisible(true);或在public void paint方法中作一者迹下判断:
public void paint() {
if(!window.isVisible()) {
window.setVisible(true);
}
Graphics g = window.getGraphics();
g.setColor(color);
g.fillRect(x, y, width, height);
}

PS:虽然程序目的没达到,但是错误是找到了!
"java.lang.NullPointerException" 空指针异常

g.setColor(color); //提示这行有问题
w.paint();//提示这行有问题粗滑

回答:
ColoredRectangle里羡凳歼面color属性兄冲你定义的是私有的,除了这个类其他类都无法访问,g是Graphics类的对象,不是ColoredRectangle的对象,所以g调用setColor()方法,color属性无法访问.所以报异常,你可以改private为public
用eclipse来开发吧,这种类型的问题有很好的提示功能
这个错误就是你的编译器用的不对,要用MyEclipse