This week's book giveaway is in the Cloud/Virtualization forum.
We're giving away four copies of Learning OpenStack Networking: Build a solid foundation in virtual networking technologies for OpenStack-based clouds and have James Denton on-line!
See this thread for details.
Win a copy of Learning OpenStack Networking: Build a solid foundation in virtual networking technologies for OpenStack-based clouds this week in the Cloud/Virtualization forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Liutauras Vilda
  • Campbell Ritchie
  • Tim Cooke
  • Bear Bibeault
  • Devaka Cooray
Sheriffs:
  • Jeanne Boyarsky
  • Knute Snortum
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Ganesh Patekar
  • Stephan van Hulst
  • Pete Letkeman
  • Carey Brown
Bartenders:
  • Tim Holloway
  • Ron McLeod
  • Vijitha Kumara

jPanel ,nullpointer exception  RSS feed

 
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hello guys
i have this drawing application where i compute pixel on a Jpanel with different colors , as i did not want to use an applet, i created a JFrame as the container of my Jpanel, My Jpanel implements Runnable as well , when i tried to called the public void run()method of the Jpanel by calling start inside the construtor of JFrame , it says nullpointer exception , could anyone tell me why and where is the best place to call my runnable?

thanks
 
Ranch Hand
Posts: 434
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Please could you post some code so that we can see why the null pointer is occuring.

Cheers,
Rachel
 
luc ndabaneze
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi rachel
sorry here is the code

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class canvas1 extends JFrame {
man mandel;
public canvas1() {
setTitle("MandelbrotSet");
setSize(600,600);

getContentPane().setLayout(new BorderLayout() );
JPanel Bottom = new JPanel();
JButton StartButton = new JButton("START");
StartButton.setEnabled(true);
mandel= new man();
getContentPane().add(mandel,BorderLayout.CENTER );
Thread runner = new Thread(mandel);
runner.start();



//StartButton.addActionListener(mandel);
Bottom.add(StartButton);
getContentPane().add(Bottom,BorderLayout.SOUTH );}
public Insets getInsets() {

return new Insets(2,2,2,2);
}



class man extends JComponent implements Runnable {

Graphics offscreen;
Image im;
double xscale,yscale;
boolean running;



double xmax = 2;
double ymax = 2;
double xmin = -1.2;
double ymin = -0.2;



public void paintComponent(Graphics g) {

if (im == null) {
g.setColor(Color.red);
g.fillRect(0,0,getWidth(),getHeight()) ; }
else
{
g.drawImage(im,0,0,null) ;}




}

public void run() {

Dimension d = getSize();
int maxX = d.width - 1;
int maxY = d.height - 1;
im = createImage(maxX,maxY);
offscreen = im.getGraphics();
offscreen.setColor(Color.black);
offscreen.fillRect(0,0,maxX,maxY);
double dx,dy;

xscale = (xmax-xmin)/d.width;
yscale = (ymax-ymin)/ d.height;

for ( int i= 0 ; i<maxX ; i++ ) {
dx= (xmin+ xscale) ;
for ( int j = 0;j<maxY;j++) {
dy = (ymin + yscale) ;
offscreen.setColor(Color.getHSBColor(calculate(dx,dy)/100.0f,1f,1f));
offscreen.fillRect(i,j,10,10);
paintImmediately(i,j,10,10);
try {
Thread.currentThread().sleep(1000) ;
}
catch (InterruptedException e) { }
dy= dy + yscale;

}
dx = dx + xscale;

}


}


int calculate(double a, double bi){

double c,ci,d,z,zi;
int Max = 250;
a= 0;
bi= 0;
int count = 0;
//c=0.2;
//ci=0.2;
d=0;

while ( count < Max && d<4) {
z= a*a- bi*bi + xmin ;
zi = 2*(a*bi) +ymin ;
a=z;
bi=zi;
d = (a*bi);

count++ ; }


return count; }

}

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {}

canvas1 application = new canvas1();
application.show();




application.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE) ;




}

thanks
}
 
Ranch Hand
Posts: 1535
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This line is the cause of the error:

Why? It is asking for a graphics context of a component that has not been realized, ie, the setVisible method has not yet been called on the JFrame so the JComponent is not on the screen/not visible and therefore the JComponent does not have a graphics context. The call to getGraphics returns null. So arrange to start the thread after the gui is realized. Here are some minimal changes that allow your app to run:

The paintComponent method in the JComponent is called as the JComponent is asked to render itself in the gui. So you can be assured that a graphic context, Graphics g, exists on this first trip through paintComponent. Now it is safe to get the size of the JComponent and to initialize the Image im. After this you can safely start your thread.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!