0

I'm getting null exception error while drawing image to jframe. i debug the code and check the image and frame is not null but still it is throwing NULL exception while drawing image to frame.

Please have a look :

public void run(){
    try{

        ObjectInputStream objVideoIn = new ObjectInputStream(serVideoIn);
        byte[] imgbytes=null;
        ByteArrayInputStream barrin=null;


        JFrame jf = new JFrame();
        Graphics ga=jf.getGraphics(); //Getting null exception 
                //Thread.sleep(10000);
        jf.setVisible(true);
        jf.setSize(400, 400);


        while(true){
                    int index=0;
                    //Thread.sleep(300);
                    int size= (int)objVideoIn.readObject();
                    imgbytes = new byte[size];
                    barrin = new ByteArrayInputStream(imgbytes);
                    System.out.println("image size" + size);
                    //Thread.sleep(200);
                    while(index<size)
                    {
                        System.out.println("reading image");
                        int bytesread = objVideoIn.read(imgbytes, index, size-index);
                        if(bytesread<0){
                            System.out.println("error in receiving bytes yar");
                        }
                        index+=bytesread;
                    }
                    //barrin.read(imgbytes, 0, imgbytes.length);
                    barrin = new ByteArrayInputStream(imgbytes);

                    buffImg = ImageIO.read(barrin);

                        if(buffImg==null)
                        {
                            System.out.println("null received");
                        }
                        else {
                            System.out.println("image received");

                        **ga.drawImage(buffImg, 0, 0, null);**


                        }
                    }

            }
    }
    catch(Exception ex)
    {
        System.out.println("error reading video" +ex.getMessage());
    }

}
Shan Khan
  • 9,667
  • 17
  • 61
  • 111

1 Answers1

5

The NPE is likely coming from here:

Graphics ga=jf.getGraphics();

as per docs:

Creates a graphics context for this component. This method will return null if this component is currently not displayable.

1) Dont use Component#getGraphics as its bad pratice/not persistent and will return null unless component is visible.

2) Rather use JPanel and override paintComponent(Graphics g) dont forget to call super.paintComponent(g); as first call in overriden paintComponent.

3) Override getPreferredSize() and return correct Dimensions to fit image being drawn.

4) add JPanel to the frame for image to be visible of course.

Alternatively You could also use a JLabel which would require nothing more than a setIcon(..) call and be added added to JFrame.

Here are some of my examples:

Using JPanel:

Using JLabel:

Community
  • 1
  • 1
David Kroukamp
  • 36,155
  • 13
  • 81
  • 138