Du har lavet 2 små smuttere. Den linje som som er usikker og kan smide en exception er:
- int stringAmount = Integer.parseInt(TextField_Amount.getText());
Det er parseInt som vil smide en exception hvis den ikke kan omdanne teksten til tal:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29Derfor skal den være ind i din try statement.
Den anden fejl får du fordi du ikke har lavet en identifier til din Exception. Når du fanger en exception får du en faktisk exception instans, derfor skal den deklares ligesom andre variabler:
- catch (Exception e) { ......
- .....
- ...
Din catch skal komme lige efter din try-blok. Følgende er en måde hvor alt koden der med tallet at gøre er samlet i try-blokken.
- private void Button_AddActionPerformed(java.awt.event.ActionEvent evt) {
- try {
- int stringAmount = Integer.parseInt(TextField_Amount.getText());
-
- String stringEnhed = (String)Combo_Enhed.getSelectedItem();
- String stringName = TextField_Name.getText();
-
- myTableModel.addRow(stringAmount, stringEnhed, stringName);
- myTableModel.fireTableDataChanged();
- }
- catch(Exception e) {
- JOptionPane.showMessageDialog(null,
- "Mængden kan kun angives som tal",
- "Fejl i indtastning",
- JOptionPane.PLAIN_MESSAGE);
- }
- }
Her er en anden måde hvor du kun har tal-indlæsningen i din try, men så skal catch blokken flyttes op:
- try {
- int stringAmount = Integer.parseInt(TextField_Amount.getText());
- }
- catch(Exception e) {
- JOptionPane.showMessageDialog(null,
- "Mængden kan kun angives som tal",
- "Fejl i indtastning",
- JOptionPane.PLAIN_MESSAGE);
- }
- String stringEnhed = (String)Combo_Enhed.getSelectedItem();
- String stringName = TextField_Name.getText();
-
- myTableModel.addRow(stringAmount, stringEnhed, stringName);
- myTableModel.fireTableDataChanged();
-
-
- }
Det god praksis kun at fange lige præcis den exception man forventer der kan opstå og ved hvordan skal håndteres. Derfor kunne du i stedet for:
- catch(Exception e)
Bruge
- catch(NumberFormatException e)