File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Swing / AWT / SWT and the fly likes why does this code fail? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "why does this code fail?" Watch "why does this code fail?" New topic
Author

why does this code fail?

deep venu
Ranch Hand

Joined: Jun 09, 2001
Posts: 56
Ne ideas on why this snippet fails to when I click on any of the buttons?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TwoButtons {
JFrame frame;
JLabel label;
public static void main ( String [] args ) {
TwoButtons gui = new TwoButtons();
gui.go();
}
public void go () {
JFrame frame = new JFrame();
JButton labelButton = new JButton( "change label" );
labelButton.addActionListener( new LabelListener() );
JButton colorButton = new JButton( "change colours" );
colorButton.addActionListener( new ColorListener() );
JLabel label = new JLabel( "I am a label" );
MyDrawPanel drawPanel = new MyDrawPanel();
frame.getContentPane().add( BorderLayout.SOUTH, colorButton );
frame.getContentPane().add( BorderLayout.EAST, labelButton );
frame.getContentPane().add( BorderLayout.CENTER, drawPanel );
frame.getContentPane().add( BorderLayout.WEST, label );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 420, 300 );
frame.setVisible( true );
}
class LabelListener implements ActionListener {
public void actionPerformed( ActionEvent event ) {
label.setText("Ouch" );
}
}
class ColorListener implements ActionListener {
public void actionPerformed( ActionEvent event ) {
frame.repaint();
}
}
}
class MyDrawPanel extends JPanel {
public void paintComponent( Graphics g ) {
g.fillRect(0,0,this.getWidth(), this.getHeight());
// make random colors to fill with
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
Color randomColor = new Color(red, green, blue);
g.setColor(randomColor);
g.fillOval(70,70,100,100);
}
}
I am getting a NullPointerException
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

You've got both a local variable and a member variable named "label" and "frame". The ones that get initialized in go() are the local ones in that routine. The member variables never get initialized, so they're null, and wheh the actionListeners try to access them, you'll get an NPE.
If you don't understand this, then please take a step back and learn some of the fundamentals of Java; try reading through the first four lessons of this tutorial.


[Jess in Action][AskingGoodQuestions]
Wayne L Johnson
Ranch Hand

Joined: Sep 03, 2003
Posts: 399
You have two instance variables, "JFrame frame" and "JLabel label" that are overriden in the "go()" method. The two instance variables are never used and hence are null when you get to the action listeners. You shouldn't re-define them in the "go()" method.
This is what you want:
deep venu
Ranch Hand

Joined: Jun 09, 2001
Posts: 56
Gee! thanx.. was playing around with this code a lot and didn't realize the mistake. Thanx lot.
 
 
subject: why does this code fail?