2013-03-15 101 views
1

我在關於拋出新異常的代碼中遇到問題。拋出新的異常

JTextField中的一個我輸入數字0,但它是不正確的,我點擊後「ENTER」在這一刻鈕有拋出新的異常消息:

throw new Exception("Wrong number of express lanes range beginnig!! \n Please enter positive number!"); 

盒子消息顯示錯誤消息我只能點擊「確定」。點擊「確定」後,我希望程序停止,因爲我想糾正JTextField中的錯誤數據。我不能這樣做,因爲我點擊後,「確定程序繼續處理。我怎樣才能阻止程序和糾正數據? 這裏就是我看到我有一個問題的代碼的重要組成部分。

public class UILayer 
{ 

private JTextField text1, text2, text3, text4, text5, text6; 

private void validateNumbers() throws Exception 
{ 


    if(!text1.getText().equals("") && 
      Integer.parseInt(text1.getText()) <= 0) 
     throw new Exception("Wrong number of lanes!! \n Please enter positive number!"); 
    if(!text2.getText().equals("") && 
      Integer.parseInt(text2.getText()) <= 0) 
     throw new Exception("Wrong number of express lanes!! \n Please enter positive number!"); 

    if(!text3.getText().equals("") && 
      Integer.parseInt(text3.getText()) <= 0) 
     throw new Exception("Wrong number of express lanes range beginnig!! \n Please enter positive number!"); 

    if(!text4.getText().equals("") && 
      Integer.parseInt(text4.getText()) <= 0) 
     throw new Exception("Wrong number of express lanes range ending!! \n Please enter positive number!"); 
    if(!text5.getText().equals("") && 
      Integer.parseInt(text5.getText()) <= 0) 
     throw new Exception("Wrong number of customers!! \n Please enter positive number!"); 
    if(!text6.getText().equals("") && 
      Integer.parseInt(text6.getText()) <= 0) 
     throw new Exception("Wrong number of max items!! \n Please enter positive number!"); 

} 

protected class EnterClickListener implements ActionListener 
{ 
    private SimulationConfig info; 

    EnterClickListener() 
    { 
     info = new SimulationConfig(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     try 
     { 
      if(!(event.getActionCommand().equals(null))) 
      { 
       validateForm(); 
       validateNumbers(); 
      } 
     } 
     catch(NumberFormatException e) 
     { 
      JOptionPane.showMessageDialog(null, "Error.\nPlease enter number.", 
        "Message", JOptionPane.INFORMATION_MESSAGE); 
     } 
     catch (Exception e) 
     { 
      JOptionPane.showMessageDialog(null, "Error.\n" + e.getMessage() , 
        "Message", JOptionPane.INFORMATION_MESSAGE); 
     } 
     info.setCustomerRestriction(Integer.parseInt(text5.getText()), Integer.parseInt(text6.getText())); 
     info.setExpressRange(Integer.parseInt(text3.getText()), Integer.parseInt(text4.getText())); 
     info.setLanesNum(Integer.parseInt(text1.getText()), Integer.parseInt(text2.getText())); 
     showProgressBar(); 
     task = blayer.startSimulation(info); 
     task.addPropertyChangeListener(new PropertyChangeListener()); 
     task.execute(); 
    } 
} 

回答

2

把你的代碼

info.setCustomerRestriction(Integer.parseInt(text5.getText()).... 
...... 
task.execute(); 

內嘗試後,如果是這樣的:通過PC提供

@Override 
public void actionPerformed(ActionEvent event) 
{ 
    try 
    { 
     if(!(event.getActionCommand().equals(null))) 
     { 
      validateForm(); 
      validateNumbers(); 

      info.setCustomerRestriction(Integer.parseInt(text5.getText()), Integer.parseInt(text6.getText())); 
    info.setExpressRange(Integer.parseInt(text3.getText()), Integer.parseInt(text4.getText())); 
    info.setLanesNum(Integer.parseInt(text1.getText()), Integer.parseInt(text2.getText())); 
    showProgressBar(); 
    task = blayer.startSimulation(info); 
    task.addPropertyChangeListener(new PropertyChangeListener()); 
    task.execute(); 
     } 
    } 
    catch(NumberFormatException e) 
    { 
     JOptionPane.showMessageDialog(null, "Error.\nPlease enter number.", 
       "Message", JOptionPane.INFORMATION_MESSAGE); 
    } 
    catch (Exception e) 
    { 
     JOptionPane.showMessageDialog(null, "Error.\n" + e.getMessage() , 
       "Message", JOptionPane.INFORMATION_MESSAGE); 
    } 

} 
+0

BINGO !!!你的建議非常有幫助。謝謝你的電腦。 – user1282256 2013-03-15 04:48:26

1

解決方案是相當更好的替代是隻寫一個用戶定義的異常CL屁股有能力中止進一步的程序執行,因爲你可以重用它,因此不需要再次編寫相同的代碼(如果你要在多個地方或Java類中處理相同的異常)。 你需要做的是:

  1. 乘坐公共類延伸到RuntimeException的,異常或 的Throwable根據您的要求
  2. 乘坐公共構造一個字符串參數
  3. 調用超(your_String_parameter_here) ; (所以,如果你跳過處理這個異常和 直接處理超級類例外,適當的消息可以 被傳遞到那裏)
  4. 覆蓋toString()方法,以提供適當的字符串消息您的 異常類對象

現在,您可以在代碼中的任何位置重用此Exception類。