我的任務是創建一個實現GUI的Java程序,該GUI實現了有關需要身高和體重的BMI轉換器的GUI。目前,它是沒有完成,但我收到以下錯誤:在實現JFrame時線程「main」java.lang.NullPointerException中的異常
Exception in thread "main" java.lang.NullPointerException
at BMIGUI.<init>(BMIGUI.java:60)
at BMITest.main(BMITest.java:7)
而與我的一個朋友調試它,他建議我的錯誤是,我還沒有在初始化代碼BMIGUI我的變量「框架」。但經過第二次看,這似乎是正確的,根據我..
請幫助。由於
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;
public class BMIGUI extends JFrame
{
private final int WIDTH = 275;
private final int HEIGHT = 100;
DecimalFormat fmt = new DecimalFormat ("0.00");
private JFrame frame;
private JPanel panel;
private JLabel heightLabel, weightLabel, BMILabel, resultLabel;
private JTextField height, weight;
private JButton calculate;
public BMIGUI()
{
super("BMI Converter");
heightLabel = new JLabel ("Your height in meters:");
weightLabel = new JLabel ("Your weight in kilograms: ");
//create a "this is your BMI" label
BMILabel = new JLabel ("Your BMI is ") ;
//create a result label to hold the BMI value
resultLabel = new JLabel ("") ;
//create a JTextField to hold the person's height in inches
height = new JTextField (5);
//create a JTextField to hold the person's weight in pounds
weight = new JTextField (5) ;
//create a button to press to calculate BMI
calculate = new JButton ("calculate BMI");
//create a BMIListener and make it listen for the button to be pressed
calculate.addActionListener (new BMIListener()) ;
//set up the JPanel to go on the JFrame
panel = new JPanel();
panel.setPreferredSize (new Dimension(WIDTH, HEIGHT));
panel.setBackground (Color.yellow);
//add the height label and height textfield to the panel
panel.add (heightLabel) ;
panel.add (height) ;
//add the weight label and weight textfield to the panel
panel.add (weightLabel) ;
panel.add (weight) ;
//add the button to the panel
panel.add (calculate) ;
//add the BMI label to the panel
panel.add (BMILabel) ;
//add the label that holds the result to the panel
panel.add (resultLabel) ;
//add the panel to the frame
frame.getContentPane().add (panel);
}
public void display()
{
frame.pack();
frame.setVisible(true);
}
private class BMIListener implements ActionListener
{
public void actionPerformed (ActionEvent event)
{
String heightText, weightText;
double heightVal, weightVal, bmi;
//get the text from the height and weight textfields
heightText = height.getText();
weightText = weight.getText();
//Use Integer.parseInt to convert the text to integer values
heightVal = Double.parseDouble (heightText) ;
weightVal = Double.parseDouble (weightText) ;
//Calculate the bmi = 703 * weight in pounds/(height in inches)^2
bmi = weightVal/(heightVal*heightVal) ;
//Put result in result label. Use Double.toString to convert double to string.
resultLabel.setText(fmt.format(bmi)) ;
}
}
}
主類
import javax.swing.JFrame;
public class BMITest extends JFrame
{
public static void main(String args[])
{
BMIGUI frame = new BMIGUI();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(350,100);
frame.setVisible(true);
}
}
我明白你所說的提示是關於命名約定的。謝謝你的提示。我會毫不猶豫地記住它。至於框架,是行「私人JFrame框架」;在BMIGUI構造函數之外的實例變量中是不正確還是誤用? – Codex
謝謝。重新閱讀你的陳述後,我明白了。它現在正在工作。非常感謝! – Codex
請務必檢查[關於頁面](http://stackoverflow.com/about)以瞭解本網站的工作方式並歡迎使用StackOverflow – Sage