2013-03-15 1 views
1

J'ai un problème dans mon code concernant jeter une nouvelle exception.Throw nouvelle exception

Dans l'une des JTextField j'entrer le numéro 0, mais il est incorrect et après avoir cliqué sur "Enter" botton en ce moment il est lancé un nouveau message d'exception:

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

Le message de boîte apparaît avec le message d'erreur I peut seulement cliquer sur "OK". Après avoir cliqué sur "OK" je veux que le programme s'arrête parce que je veux corriger les mauvaises données dans le JTextField. Je ne peux pas faire cela parce qu'après je clique sur « OK le programme processus se poursuit. Comment puis-je arrêter le programme et corriger les données? Voici une partie importante du code où je vois que j'ai un problème.

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(); 
    } 
} 

Répondre

2

mettre votre code

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

essayer à l'intérieur, après si comme ceci:.

@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 !!! Votre conseil était très utile. Merci PC. – user1282256

1

solution fournie par PC est tout à fait mieux un autre est juste écrire une cl d'exception définies par l'utilisateur ass qui a la capacité d'abandonner l'exécution du programme, car vous pouvez le réutiliser et donc plus besoin d'écrire le même code (dans le cas où vous allez gérer la même exception dans plusieurs endroits ou dans des classes java). Ce que vous devez faire est:

  1. Prenez une classe publique jusqu'à RuntimeException, exception ou Throwable selon vos besoins
  2. Prenez un constructeur public avec un paramètre de chaîne
  3. appel à super (your_String_parameter_here) ; forme à l'intérieur de votre constructeur (donc que si vous sautez à gérer cette exception et poignée directe Super classe Exception le message approprié peut être transmis jusqu'à là) méthode
  4. dérogation toString() pour fournir un message de chaîne approprié pour Objet de classe d'exception

Vous pouvez désormais réutiliser cette classe d'exception n'importe où dans votre code.