2012-03-08 57 views
0

我对这段代码有很多麻烦。代码编译并运行之前,我试图将代码放入一个异常。然后我不能再编译它了。假设用户输入一个负数,则会捕获异常并产生一条错误消息。编译/捕获异常

import java.awt.event.ActionEvent; //Next group of lines import various Java classes 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JCheckBox; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.GridLayout; 
import java.text.*; 
import java.io.IOException; 

public class SquareRoot extends JFrame 
{ 
    public static void main(String[] args) { 
     //Creates Window 
     JFrame frame = new JFrame(); 
     frame.setSize(450, 300); 
     frame.setTitle("Find the Square Root"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel Numberlbl = new JLabel("Enter a number:"); 
     final JTextField NumberField = new JTextField(10); 
     NumberField.setText(""); 

     JLabel Answerlbl = new JLabel("Square Root of your number is:"); 
     final JTextField AnswerField = new JTextField(10); 
     AnswerField.setText(""); 

     JLabel ButtonLabel = new JLabel("Calculate Square Root"); 
     JButton button = new JButton("Find Square Root"); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(Numberlbl); 
     panel.add(NumberField); 
     panel.add(ButtonLabel); 
     panel.add(button); 
     panel.add(Answerlbl); 
     panel.add(AnswerField); 
     frame.add(panel); 

     class CalculateListener implements ActionListener { 

      public void actionPerformed(ActionEvent event) { 

       double NumberX = Double.parseDouble(NumberField.getText()); 
       try 
       { 
        if(NumberX >=0); 
       } 
       catch(IOException e) 
       { 
        System.out.println("Number can not be negative."); 
       } 
       double Answer = Math.sqrt(NumberX); 
       AnswerField.setText(String.valueOf(Answer)); 

      } 
     } 

     ActionListener listener = new CalculateListener(); 
     button.addActionListener(listener); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     } 
    } 
+0

当您尝试编译时,出现什么错误? – 2012-03-08 05:49:18

+0

SquareRoot.java:61:异常java.io.IOException的在相应try语句的身体从来没有抛出 \t \t \t \t赶上(IOException异常E) \t \t \t \t^ – 2012-03-08 05:50:49

+0

的可能重复【JAVA可达catch块编译器错误] (http://stackoverflow.com/questions/5899849/java-unreachable-catch-block-compiler-error) – 2012-03-08 05:54:16

回答

2

你不需要try-catch检查阴性,下面应该就足够了。但是当你格式化时你可能需要尝试一下。

double noX = 0; 
try { 
    noX = Double.parseDouble(NumberField.getText()); 
} catch(NumberFormatException e) { 
    System.out.println("Not a valid number"); 
} 
if(noX < 0) { 
    System.out.println("Number can not be negative."); 
} 
+0

确实如此,但是如果有人试图将“foo”传递给parseDouble(),则应该捕获NumberFormatException。 – 2012-03-08 06:05:47

0

它能够更好地使用:

double NumberX = Double.parseDouble(NumberField.getText()); 
      if(NumberX <=0){ 
      System.out.println("Number can not be negative."); 
      } 
double Answer = Math.sqrt(NumberX); 
AnswerField.setText(String.valueOf(Answer)); 
+0

是的,但我的任务,我不得不赶上一个例外。 – 2012-03-08 05:54:38

0

Netbeans的说 “异常java.io.IOException的是从来没有在if语句对应抛出”。

基本上,如果语句不抛出异常。

0

引发自定义异常..

   try 
       { 
        if(NumberX >=0); 
        else 
         throw new Exception("Number Negative"); 
       } 
       catch(Exception e) 
       { 
        System.out.println("Number can not be negative."+e.getMessage()); 
       } 
0

它运行良好。

 package com.test; 

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class SquareRoot extends JFrame { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public static void main(String[] args) { 
    // Creates Window 
    JFrame frame = new JFrame(); 
    frame.setSize(450, 300); 
    frame.setTitle("Find the Square Root"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JLabel Numberlbl = new JLabel("Enter a number:"); 
    final JTextField NumberField = new JTextField(10); 
    NumberField.setText(""); 

    JLabel Answerlbl = new JLabel("Square Root of your number is:"); 
    final JTextField AnswerField = new JTextField(10); 
    AnswerField.setText(""); 

    JLabel ButtonLabel = new JLabel("Calculate Square Root"); 
    JButton button = new JButton("Find Square Root"); 

    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(3, 2)); 
    panel.add(Numberlbl); 
    panel.add(NumberField); 
    panel.add(ButtonLabel); 
    panel.add(button); 
    panel.add(Answerlbl); 
    panel.add(AnswerField); 
    frame.add(panel); 

    class CalculateListener implements ActionListener { 

     public void actionPerformed(ActionEvent event) { 

     double NumberX; 
     try { 
      NumberX = Double.parseDouble(NumberField.getText()); 

      if (NumberX < 0) { 
      AnswerField.setText("Please enter positive value."); 
      } 
      else if (NumberX >= 0) { 
      double Answer = Math.sqrt(NumberX); 
      AnswerField.setText(String.valueOf(Answer)); 
      } 
     } 
     catch (NumberFormatException e) { 
      AnswerField.setText("Incorrect number entered."); 
      e.printStackTrace(); 
     } 
     } 
    } 

    ActionListener listener = new CalculateListener(); 
    button.addActionListener(listener); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

    } 
}