Нужна помощь в захвате исключений с помощью этой программы - PullRequest
0 голосов
/ 09 октября 2010

Я пытался изменить мой код, чтобы ловить исключения, но не могу понять, как это сделать с этим. Время от времени я также сталкиваюсь с двойной реализацией 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2010

Я думаю, вы новичок в качелях.

Я не знаю, о каких исключениях вы говорите, но я должен сделать это следующим образом:

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();
0 голосов
/ 09 октября 2010

Вы говорите о NumberFormatException всякий раз, когда конечный пользователь вводит недействительный weight, не так ли? И вы хотите снова отображать диалоговое окно всякий раз, когда пользовательский ввод неверен?

Один из способов - сделать это в цикле, пока вес равен нулю. Сделайте это внутри метода main() после создания frame. Вот изменения.

// ...
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?
        }
    }
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...