So I have a lot of code so I guess I'll just post the couple classes that seem to be giving me problems and where the problem is occuring.

// line class to store lines from .ps file
class line {

	// for outcodes
	private int RIGHT = 2;
    private int TOP = 8;
    private int LEFT = 1;
    private int BOTTOM = 4;

	
	// two points signify each line
	private point point0;
	private point point1;
	
	public line(point _point1, point _point2) {
		point0 = _point1;
		point1 = _point2;
	}
	public void setPoint1(point _new) {
		point0 = _new;
	}
	
	public void setPoint2 (point _another) {
		point1 = _another;
	}
	
	public point getPoint1() {
		return point0;
	}
	
	public point getPoint2() {
		return point1;
	}
	
	public float getSlope() {
		int rise = point0.getY() - point1.getY();
		int run = point0.getX() - point1.getX();
		
		float slope = rise/run;
		return slope;
	}
	
	// only for drawing
	// AFTER clipping
	public void DDA(xpm _file) {
		int x1 = this.getPoint1().getX();
		int y1 = this.getPoint1().getY();
		int x2 = this.getPoint2().getX();
		int y2 = this.getPoint2().getY();
		
		double m = (double)(y2-y1)/(x2-x1);
		double y = (double)y1;
		int iy;
		for (int x = x1 ; x <= x2 ; x++) {
			iy = (int)Math.round(y);
			setPixel(x, iy, _file);
			y += m;
		}
	}

	// actually setting the correct pixel in .XPM
	private void setPixel(int x, int iy, xpm _file) {
		_file.pixels[x][iy].setValue("b");
	}
	
	// getting the codes for the inputted lines
	// find out where to clip them
	public int ComputeOutCode (int x, int y, int xmin, int ymin, int xmax, int ymax)
    {
        int code = 0;
        if (y > ymax)
            code |= TOP;
        else if (y < ymin)
            code |= BOTTOM;
        if (x > xmax)
            code |= RIGHT;
        else if (x < xmin)
            code |= LEFT;
        return code;
    }
	
	// clip the lines right before drawing them
	public void cohenSutherland( int x1, int y1, int x2, int y2, int xmin, int ymin, int xmax, int ymax)
    {
        //Outcodes for P0, P1, and whatever point lies outside the clip rectangle
        int outcode0, outcode1, outcodeOut, hhh = 0;
        boolean accept = false, done = false;
 
        //compute outcodes
        outcode0 = ComputeOutCode (x1, y1, xmin, ymin, xmax, ymax);
        outcode1 = ComputeOutCode (x2, y2, xmin, ymin, xmax, ymax);
 
        //System.out.println( outcode0 + " " + outcode1 );
 
        do{
            if ((outcode0 | outcode1) == 0 )
            {
                accept = true;
                done = true;
            }
            else if ( (outcode0 & outcode1) > 0 )
            {
                done = true;
            }
 
            else
            {
                //failed both tests, so calculate the line segment to clip
                //from an outside point to an intersection with clip edge
                int x = 0, y = 0;
                //At least one endpoint is outside the clip rectangle; pick it.
                outcodeOut = outcode0 != 0 ? outcode0: outcode1;
                //Now find the intersection point;
                //use formulas y = y0 + slope * (x - x0), x = x0 + (1/slope)* (y - y0)
                if ( (outcodeOut & TOP) > 0 )
                {
                    x = x1 + (x2 - x1) * (ymax - y1)/(y2 - y1);
                    y = ymax;
                }
                else if ((outcodeOut & BOTTOM) > 0 )
                {
                    x = x1 + (x2 - x1) * (ymin - y1)/(y2 - y1);
                    y = ymin;
                }
                else if ((outcodeOut & RIGHT)> 0)
                {
                    y = y1 + (y2 - y1) * (xmax - x1)/(x2 - x1);
                    x = xmax;
                }
                else if ((outcodeOut & LEFT) > 0)
                {
                    y = y1 + (y2 - y1) * (xmin - x1)/(x2 - x1);
                    x = xmin;
                }
                //Now we move outside point to intersection point to clip
                //and get ready for next pass.
                if (outcodeOut == outcode0)
                {
                    x1 = x;
                    y1 = y;
                    outcode0 = ComputeOutCode (x1, y1, xmin, ymin, xmax, ymax);
                }
                else
                {
                    x2 = x;
                    y2 = y;
                    outcode1 = ComputeOutCode (x2, y2, xmin, ymin, xmax, ymax);
                }
            }
            hhh ++;
        }
        while (done  != true && hhh < 5000);
 
 
        if(accept)
        {
            set( x1, y1, x2, y2);
        }
 
    }

	
	private void set(int x1, int y1, int x2, int y2) {
		point newPoint1 = new point(x1,y1);
		point newPoint2 = new point(x2,y2);
		this.setPoint1(newPoint1);
		this.setPoint2(newPoint2);
		
	}
	
}

The null pointer exception occurs in line 63 when it goes to setPixel in the array. Here is my xpm class, which might help.

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

// xpm class 
// aka frame buffer

public class xpm {
	
	public pixel[][] pixels;
	
	private String header = "/* XPM */";
	
	private String array = "static char *sco100[] = { ";
	
	private String header2 = " /* width height num_colors chars_per_pixel */ ";
	
	private String dimensions = " \"500 500 2 1\", ";
	
	private String header3 = " /* colors */ ";
	
	private String white = " \"- c #ffffff\", ";
	
	private String black = " \"b c #000000\", ";
	
	private String header4 = " /* pixels */ ";
	
	private String pixelsString = "";
	
	private String end = "};";
	
	public xpm() {
		
		pixels = new pixel[500][500];
	}
	
	public void makePixelsString() {
		
		String thisLine = "";
		for (int i = 0; i < pixels.length; i++) {
			thisLine += "\"";
			for (int j = 0; j < pixels[i].length; j++) {
				thisLine += pixels[i][j].getValue();
			}
			if (i == pixels.length - 1) {
				thisLine += "\"\n";
			}
			else {
				thisLine += "\",\n";
			}
		}
		
		pixelsString = thisLine;
	}
	
	public pixel getArraySpot(int x, int y) {
		return pixels[x][y];
	}
	
	public void makeXPM() throws IOException {
	    String text = header + array + header2 + dimensions + header3 + white + black + header4 
	    					 + pixelsString + end;
	    // add pixels..
	    
	    
	    File file = new File("out.xpm");
	    
	    BufferedWriter output = new BufferedWriter(new FileWriter(file));
	    output.write(text);
	    output.close();
	}
}

Also if you have any other pointers or need to see more code I can provide it for you.

This thing is due by tonight at midnight, it's 8:17pm here right now :(

Edited 7 Years Ago by gotm: n/a

Usually a NullPointerException means that you are trying to use something that is null. So if you get the exception at line 63:

_file.pixels[x][iy].setValue("b");

it would mean that: "_file.pixels[x][iy]" is null. So how do you populate that array?

This article has been dead for over six months. Start a new discussion instead.