Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

NumberFormatException - Help!

1 view
Skip to first unread message

TSK

unread,
Jun 20, 2002, 8:57:11 AM6/20/02
to
Can you find anything wrong with this code that causes a
NumberFormatException? I'm a beginner, so I haven't got to exception
handling yet. I'm working from Deitel and Deitel's book "Java 2: How to
Program". I don't care what number I put in (with or without a decimal
point), the exception is always there. I don't see anything wrong with the
code. Do you? Please feel free to copy this code and use it on your own
computer, and let me know what works for you. Your help will be greatly
appreciated. Here I've posted the code and below it is the runtime error
message. I've even modified the first conversion method convertF2C and it
still doesn't work.

// Exercise 12.13

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Temperature extends JFrame
{
private JLabel enterTemp, convertTemp;
private JTextField tempField, resultsField;
private JComboBox scales;
private JRadioButton scaleButtons[];
private ButtonGroup rbGroup;
private JPanel top, middle, bottom;
private Container c;
private String scaleNames[] = {"Fahrenheit", "Centigrade", "Kelvin"};
private RadioButtonHandler handler;

public Temperature()
{
super("Temperature Conversion App");
c = getContentPane();
c.setLayout(new GridLayout(3,1));
setupTop();
setupMiddle();
setupBottom();
setSize(500,300);
show();
}

public void setupTop()
{
top = new JPanel();
top.setLayout(new FlowLayout());
enterTemp = new JLabel("Please enter a temperature:");
top.add(enterTemp);
tempField = new JTextField(5);
top.add(tempField);
scales = new JComboBox(scaleNames);
scales.setMaximumRowCount(1);
top.add(scales);
c.add(top);
}

public void setupMiddle()
{
middle = new JPanel();
middle.setLayout(new FlowLayout());
convertTemp = new JLabel("I wanna convert this to:");
middle.add(convertTemp);
handler = new RadioButtonHandler();
scaleButtons = new JRadioButton[3];
rbGroup = new ButtonGroup();

for (int i=0; i < scaleButtons.length; i++)
{
scaleButtons[i] = new JRadioButton(scaleNames[i], false);
scaleButtons[i].addItemListener(handler);
rbGroup.add(scaleButtons[i]);
middle.add(scaleButtons[i]);
}


c.add(middle);
}

public void setupBottom()
{
bottom = new JPanel();
bottom.setLayout(new FlowLayout());
resultsField = new JTextField(50);
resultsField.setEditable(false);
bottom.add(resultsField);
c.add(bottom);
}

private class RadioButtonHandler implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
if (e.getSource()==scaleButtons[0])
{
if (scales.getSelectedIndex()==0)
resultsField.setText("You already have the Fahrenheit temp!");
else if (scales.getSelectedIndex()==1)
{
convertF2C(enterTemp.getText());
}
else if (scales.getSelectedIndex()==2)
convertF2K(enterTemp.getText());
} // end if

if (e.getSource()==scaleButtons[1])
{
if (scales.getSelectedIndex()==0)
convertC2F(enterTemp.getText());
else if (scales.getSelectedIndex()==1)
resultsField.setText("You already have the Centigrade temp!");
else if (scales.getSelectedIndex()==2)
convertC2K(enterTemp.getText());
} // end if

if (e.getSource()==scaleButtons[2])
{
if (scales.getSelectedIndex()==0)
convertK2F(enterTemp.getText());
else if (scales.getSelectedIndex()==1)
convertK2C(enterTemp.getText());
else if (scales.getSelectedIndex()==2)
resultsField.setText("You already have the Kelvin temp!");
}

} // end itemStateChanged
} // end RadioButtonHandler

public void convertF2C(String input)
{
double temp = Double.parseDouble(input);
String output = "";

output = temp + " degrees Fahrenheit is " + ((5/9)*(temp-32)) + "
degrees Centigrade.";
resultsField.setText(output);
/* resultsField.setText(temp + " degrees Fahrenheit is
"+((5/9)*(temp-32)) + " degrees

Centigrade."); */
}

public void convertF2K(String input)
{ double temp = 0.0;
temp = Double.parseDouble(input);
resultsField.setText(temp + " degrees Fahrenheit is
"+((5/9)*(temp-32)+273) + " degrees

Kelvin.");
}

public void convertC2F(String input)
{
double temp = Double.parseDouble(input);
resultsField.setText(temp + " degrees Centigrade is " +((9/5)*temp+32) +
" degrees

Fahrenheit.");
}

public void convertC2K(String input)
{
double temp = Double.parseDouble(input);
resultsField.setText(temp + " degrees Centigrade is " +(temp+273) + "
degrees Kelvin.");
}

public void convertK2F(String input)
{
double temp = Double.parseDouble(input);
resultsField.setText(temp + " degrees Kelvin is " +((9/5)*(temp-273)+32)
+ " degrees

Fahrenheit.");
}

public void convertK2C(String input)
{
double temp = Double.parseDouble(input);
resultsField.setText(temp + " degrees Kelvin is " + (temp-273) + "
degrees Centigrade.");
}


public static void main(String args[])
{
Temperature app = new Temperature();

app.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
} // end main
} // end class

C:\jdk1.2.1\bin>java Temperature
Exception occurred during event dispatching:
java.lang.NumberFormatException: Please enter a temperature:
at java.lang.FloatingDecimal.readJavaFormatString(Compiled Code)
at java.lang.Double.parseDouble(Double.java:188)
at Temperature.convertC2F(Temperature.java:134)
at
Temperature$RadioButtonHandler.itemStateChanged(Temperature.java:96)
at javax.swing.AbstractButton.fireItemStateChanged(Compiled Code)
at
javax.swing.AbstractButton$ForwardItemEvents.itemStateChanged(Abstrac
tButton.java:1112)
at javax.swing.DefaultButtonModel.fireItemStateChanged(Compiled
Code)
at
javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton
.java:222)
at
javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.
java:239)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:217)
at java.awt.Component.processMouseEvent(Component.java:3126)
at java.awt.Component.processEvent(Compiled Code)
at java.awt.Container.processEvent(Compiled Code)
at java.awt.Component.dispatchEventImpl(Compiled Code)
at java.awt.Container.dispatchEventImpl(Compiled Code)
at java.awt.Component.dispatchEvent(Compiled Code)
at java.awt.LightweightDispatcher.retargetMouseEvent(Compiled Code)
at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:1732)

at java.awt.LightweightDispatcher.dispatchEvent(Compiled Code)
at java.awt.Container.dispatchEventImpl(Compiled Code)
at java.awt.Window.dispatchEventImpl(Compiled Code)
at java.awt.Component.dispatchEvent(Compiled Code)
at java.awt.EventQueue.dispatchEvent(Compiled Code)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:68)


Jason Teagle

unread,
Jun 20, 2002, 6:13:53 AM6/20/02
to

"TSK" <susa...@mindspring.com> wrote in message
news:aes8ta$r8l$1...@slb6.atl.mindspring.net...

> Can you find anything wrong with this code that causes a
> NumberFormatException? I'm a beginner, so I haven't got to exception

> public class Temperature extends JFrame


> {
> private JLabel enterTemp, convertTemp;
> private JTextField tempField, resultsField;

[SNIP]

> if (scales.getSelectedIndex()==0)
> convertC2F(enterTemp.getText());

You are trying to pass the text from enterTemp, which is a _label_, instead
of the text the user is entering, which is in a different control. You need
to make sure you use the right control to get the user input from!


--
--
Jason Teagle
ja...@teagster.co.uk
-----------------------------------------------------------
A list of programming resources I use:
ML: www.windev.org, www.codecipher.com, www.beginthread.com
MB: www.codeguru.com, www.codeproject.com
NG: comp.lang.java.*
OI: www.php.net
-----------------------------------------------------------

TSK

unread,
Jun 20, 2002, 9:33:12 AM6/20/02
to
Thank you, Jason! I'm gonna have to be more careful about what I name my
labels and other widgets. Now I just need to iron out my computation errors
:-)

"Jason Teagle" <ja...@teagster.co.uk> wrote in message
news:CVhQ8.491$kb3....@news8-gui.server.ntli.net...

Jason Teagle

unread,
Jun 20, 2002, 7:11:49 AM6/20/02
to

"TSK" <susa...@mindspring.com> wrote in message
news:aesb0q$785$1...@slb4.atl.mindspring.net...

> Thank you, Jason! I'm gonna have to be more careful about what I name my
> labels and other widgets. Now I just need to iron out my computation
errors
> :-)

Don't worry, it's an easy slip-up to make. I might recommend you name the
text field "enterTemp" and the label that goes with it "enterTempLegend" - I
find that by slapping "Legend" on the end of the name when I name labels, I
am less likely to mix it up.

0 new messages