2010-10-09 70 views
0

一直试图改变我的代码来捕捉异常,但无法弄清楚如何用这个去解决它。我偶尔会遇到JOptionPane的双重实例化,这取决于我放在哪里。需要帮助捕获这个程序的例外

import java.awt.Font; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class JCalculateWeight extends JFrame { 

    Font font = new Font("Arial", Font.BOLD, 14); 
    JFrame frame; 
    String name = JOptionPane.showInputDialog(frame, "What's your name?"); 
    String weight = JOptionPane.showInputDialog(frame, "What's your weight (lbs)"); 

    @Override 
    public void paint(Graphics brush) { 
     super.paint(brush); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     double lbs = Double.parseDouble(weight); 
     double oz = lbs * 16; 
     double kilo = lbs/2.204623; 
     double metricton = lbs/2204.623; 
     brush.setFont(font); 
     brush.drawString(name, 55, 50); 
     brush.drawString(String.valueOf(lbs), 55, 150); 
     brush.drawString(String.valueOf(oz), 55, 170); 
     brush.drawString(String.valueOf(kilo), 55, 190); 
     brush.drawString(String.valueOf(metricton), 55, 210); 
    } 

    public static void main(String[] args) { 
     JCalculateWeight frame = new JCalculateWeight(); 
     frame.setSize(500, 450); 
     frame.setVisible(true); 
    } 
} 
+0

你有问题吗?你在说什么例外? – 2010-10-09 19:37:50

回答

0

你在谈论NumberFormatException每当终端用户输入无效weight,不是吗?你想在用户输入无效时重新显示对话框?

其中一种方法是只要重量为零,就可以在循环中执行此操作。在frame创建后,在main()方法内执行此操作。这是变化。

// ... 
String name; 
double weight; 

@Override 
public void paint(Graphics brush) { 
    // ... 
    double lbs = weight; // "weight" can also just be renamed to "lbs", then you can remove this line. 
    // ... 
} 

public static void main(String[] args) { 
    JCalculateWeight frame = new JCalculateWeight(); 
    frame.name = JOptionPane.showInputDialog(frame, "What's your name?"); 
    while (frame.weight == 0) { 
     try { 
      frame.weight = Double.parseDouble(JOptionPane.showInputDialog(frame, "What's your weight (lbs)")); 
     } catch (NumberFormatException e) { 
      // Maybe log it? Maybe change the question message? 
     } 
    } 
    // ... 
} 
0

你是很新的挥杆,我想。

我不知道你在说什么异常,但我应该做这种方式:

public WeightCalculatorFrame extends JComponent 
{ 
    private String name; 
    private double lbs; 

    public WeightCalculatorFrame() 
    { 
     name = JOptionPane.showInputDialog("What is your name?"); 
     try 
     { 
      lbs = Double.parseDouble(JOptionPane.showInputDialog("What is your weight in lbs")); 
     } catch (NumberFormatException e) 
     { 
      JOptionPane.showMessageDialog(null, "Invalid decimal format!\nWill now exit"); 
      System.exit(-1); 

     JFrame frame = new JFrame("Weight Calculator"); 
     frame.setPreferredSize(new Dimension(300, 400)); 
     frame.add(this); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    @Override 
    public void paintComponent(Graphics g) 
    { 
     g.setFont(yourFont); 
     g.drawString("Your Name: " + name, x, y); 
     double kilo = lbs/....; 
     double ... = lbs/....; 
     // Here all your calculations... 
     g.drawString("LBS: " + lbs, x, y); 
     g.drawString("Kilo: " + kilo, x, y); 
    } 
} 

这个初始化:

new WeightCalculatorFrame();