hello, I have to do for my end of studies project a program wich allow to connect to an ip camera and display a real time video. I've searched on many forums but I can't find a way out. the only code I found is the following but I can't make it work. There is a null pointer exception when it try to display what sees the camera. If there is any source code or tutorial I'll be thankful


Code:
 
import java.net.*;
import com.sun.image.codec.jpeg.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
 
 
public class AxisCamera1 extends JPanel implements Runnable
{
    public boolean useMJPGStream = true; //still image set to false
 
    public String mjpgURL="http://user:passWord@monIp:port/videostream.cgi";
    DataInputStream dis;
    private BufferedImage image=null;
    int counter=0;
 
    public Dimension imageSize = null;
    public boolean connected = false;
    private boolean initCompleted = false;
    HttpURLConnection huc=null;
    Component parent;
 
    /** Creates a new instance of AxisCamera1 */
    public AxisCamera1(Component parent_) {
    parent = parent_;
    }
 
    public static Image getScaledInstanceAWT(BufferedImage source, double factor) {
    int w = (int) (source.getWidth() * factor);
    int h = (int) (source.getHeight() * factor);
    return source.getScaledInstance(w, h, Image.SCALE_SMOOTH);
    }
 
    public static BufferedImage toBufferedImage(Image image) {
    new ImageIcon(image); //load image
    int w = image.getWidth(null);
    int h = image.getHeight(null);
    BufferedImage bimage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_INDEXED);
    //BufferedImage bimage = getDefaultConfiguration().createCompatibleImage(w, h, Transparency.OPAQUE);
    Graphics2D g = bimage.createGraphics();
    g.drawImage(image, 0, 0, null);
    g.dispose();
    return bimage;
    }
 
    public void connect()
    {
        try
        {
            URL u = new URL(mjpgURL);
            huc = (HttpURLConnection) u.openConnection();
            //System.out.println("huc="+huc);
            System.out.println(huc.getInputStream());
            InputStream is = huc.getInputStream();
            //System.out.println("is="+is);
            connected = true;
            BufferedInputStream bis = new BufferedInputStream(is);
            //System.out.println("bis="+bis);
            dis= new DataInputStream(bis);
            if (!initCompleted) initDisplay();
        }
        catch(IOException e)
        { //incase no connection exists wait and try again, instead of printing the error
 
            try
            {
                huc.disconnect();
                Thread.sleep(60);
            }
            catch(InterruptedException ie)
            {
                //huc.disconnect();connect();
            }
            //connect();
        }
        catch(Exception e){;}
    }
 
    public void initDisplay()
    { //setup the display
        if (useMJPGStream)readMJPGStream();
        else
        {
            readJPG();
            disconnect();
        }
        imageSize = new Dimension(image.getWidth(this), image.getHeight(this));
        setPreferredSize(imageSize);
        parent.setSize(imageSize);
        parent.validate();
        initCompleted = true;
    }
 
    public void disconnect(){
    try{
    if(connected){
    dis.close();
    connected = false;
    }
    }catch(Exception e){;}
    }
 
    public void paint(Graphics g) { //used to set the image on the panel
    if (image != null)
    g.drawImage(image, 0, 0, this);
    }
 
    public void readStream(){ //the basic method to continuously read the stream
    try{
    if (useMJPGStream){
    while(true){
    readMJPGStream();
    parent.repaint();
    }
    }
    else{
    while(true){
    connect();
    readJPG();
    parent.repaint();
    disconnect();
 
    }
    }
 
    }catch(Exception e){;}
    }
 
 
    public void readMJPGStream(){ //preprocess the mjpg stream to remove the mjpg encapsulation
    readLine(4,dis); //discard the first 3 lines
    readJPG();
    readLine(1,dis); //discard the last two lines
    }
 
    public void readJPG(){ //read the embedded jpeg image
    try{
    JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
    image = decoder.decodeAsBufferedImage();
 
    String s="a"+counter+".jpg";
    counter++;
    String filename="c:\\find_stillset\\"+s;
    System.out.println(filename);
 
    BufferedImage smaller = toBufferedImage(getScaledInstanceAWT(image, 1.0/3.0));//scalling image size
 
    try {
    OutputStream out = new FileOutputStream(filename);
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    encoder.encode(smaller);
    out.close();
    } catch (Exception e) {
    System.out.println(e);
    }
 
    }catch(Exception e){e.printStackTrace();disconnect();}
    }
 
    public void readLine(int n, DataInputStream dis){ //used to strip out the header lines
    for (int i=0; i<n;i++){
    readLine(dis);
    }
    }
 
    public void readLine(DataInputStream dis){
    try{
    boolean end = false;
    String lineEnd = "\n"; //assumes that the end of the line is marked with this
    byte[] lineEndBytes = lineEnd.getBytes();
    byte[] byteBuf = new byte[lineEndBytes.length];
 
    while(!end){
    dis.read(byteBuf,0,lineEndBytes.length);
    String t = new String(byteBuf);
    System.out.print(t); //uncomment if you want to see what the lines actually look like
    if(t.equals(lineEnd)) end=true;
    }
    }catch(Exception e){e.printStackTrace();}
 
 
    }
    public void run() {
        System.out.println("in Run...................");
        connect();
        readStream();
    }
 
    public static void main(String[] args) {
 
        //System.setProperty("http.proxyHost","proxy.tp.edu.sg");
    //    System.setProperty("http.proxyPort","80");
    JFrame jframe = new JFrame();
    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    AxisCamera1 axPanel = new AxisCamera1(jframe);
    new Thread(axPanel).start();
    jframe.getContentPane().add(axPanel);
    jframe.pack();
    jframe.show();
    }
 
}