2010-01-11 4 views
1

J'ai beaucoup cherché, mais je ne pouvais pas trouver la bonne réponse pour cela.J'utilise le bloc try_catch pour cette exception (si cette exception est levée, une trame sera montrée à l'utilisateur que je lui dirai un message) mais il montre toujours l'exception dans la console. S'il vous plaît, aidez-moi. Merci.Comment pouvons-nous gérer la ConnectException?

méthode

submit() qui jetteront cette exception:

private void submit() throws ConnectException { 

    String id = idField.getText(); 
    char[] pass1 = passField.getPassword(); 
    String pass = new String(pass1); 
    if (id.equals("") || pass.equals("")) { 
     JOptionPane.showMessageDialog(this, "You should enter an ID and password", "Sign_In Problem", JOptionPane.OK_OPTION); 
     return; 
    } else { 
     boolean b = Manager.Test(id, pass); 
     if (b == true) { 
      this.setVisible(false); 

      Main.runAClient(); 

      ListFrame frame = new ListFrame(client); 
      frame.setVisible(true); 





     } else { 

      JOptionPane.showMessageDialog(this, "You have entered wrong datas,try it again", "Sign_In Problem", JOptionPane.OK_OPTION); 
      return; 
     } 
    } 
} 

Je travaille avec NetBeans, ceci est une action bouton Se connecter:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     submit(); 
    } catch (ConnectException ex) { 
     JOptionPane.showMessageDialog(this, "You coudn't connect to the server successfully,try it again", "Sign_In Problem", JOptionPane.OK_OPTION); 

    }} 

ma méthode de runAClient:

public static void runAClient()throws ConnectException{ 
    try { 
     c = new Socket("localhost", 5000); 
    } catch (ConnectException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

stacktrace:

init: 
deps-jar: 
compile-single: 
run-single: 
Jan 11, 2010 5:20:35 PM ClientNetWork.Main runAClient 
SEVERE: null 
java.net.ConnectException: Connection refused: connect 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
     at java.net.Socket.connect(Socket.java:518) 
     at java.net.Socket.connect(Socket.java:468) 
     at java.net.Socket.<init>(Socket.java:365) 
     at java.net.Socket.<init>(Socket.java:179) 
     at ClientNetWork.Main.runAClient(Main.java:29) 
     at ClientGUI.MainFrame.submit(MainFrame.java:335) 
     at ClientGUI.MainFrame.jButton1ActionPerformed(MainFrame.java:233) 
     at ClientGUI.MainFrame.access$400(MainFrame.java:34) 
     at ClientGUI.MainFrame$5.actionPerformed(MainFrame.java:122) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
     at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 
     at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:191) 
     at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636) 
     at javax.swing.JComponent.processKeyBinding(JComponent.java:2849) 
     at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267) 
     at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:216) 
     at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2926) 
     at javax.swing.JComponent.processKeyBindings(JComponent.java:2918) 
     at javax.swing.JComponent.processKeyEvent(JComponent.java:2812) 
     at java.awt.Component.processEvent(Component.java:5815) 
     at java.awt.Container.processEvent(Container.java:2058) 
     at java.awt.Component.dispatchEventImpl(Component.java:4410) 
     at java.awt.Container.dispatchEventImpl(Container.java:2116) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848) 
     at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697) 
     at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962) 
     at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834) 
     at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661) 
     at java.awt.Component.dispatchEventImpl(Component.java:4282) 
     at java.awt.Container.dispatchEventImpl(Container.java:2116) 
     at java.awt.Window.dispatchEventImpl(Window.java:2429) 
     at java.awt.Component.dispatchEvent(Component.java:4240) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) 
+6

après 105 questions, n'avez-vous pas appris à donner des exemples de code? – Bozho

+0

Veuillez coller la pile complète à partir de la console ... peut-être que ce n'est pas l'exception exacte que vous croyez? – jsight

+0

Je modifiais mon post que vous avez écrit ce commentaire, de toute façon, désolé! – Johanna

Répondre

2

Avez-vous le code pour

Main.runAClient(); 

peut-être quelqu'un rattrapent cette exception et l'exploitation forestière, puis rethrowing?

+1

En effet, il est en cours d'enregistrement, voir ici: http://stackoverflow.com/questions/2041817/gui-problemnetwork-problem – laura

+0

ahahaha, laura, impressionnant .. – Bozho

6

Vous posté le code dans votre question précédente: Sign in button has no visible effect in a Java application

A en juger par la méthode runAClient, vous connectez l'exception et le manger vers le haut (pas jeter plus loin).

public static void runAClient() { 
    try { 
     c = new Socket("localhost", 5000); 
    } catch (UnknownHostException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

La deuxième prise (IOException) ne doit pas ouvrir une session et devrait jeter l'exception. En fait, vous voulez probablement diviser cette capture en une capture ConnectException que vous souhaitez lancer et une capture IOException que vous pouvez gérer séparément.

Éditer: Je vais prolonger cela un peu. ConnectException étend RemoteException qui à son tour s'étend IOException, que vous attrapez et vous connectez votre méthode runAClient. Vous pouvez faire deux choses:

  • supprimer la IOException tout à fait, et l'attraper à un niveau supérieur (une solution qui est très laid, à mon avis)

ou

  • diviser la IOException bloquer en deux blocs catch, un pour le ConnectException, dans lequel vous venez de lancer, et un pour le reste de la IOException s, que vous pouvez vous connecter (ou gérer différemment) - assurez-vous que leBloc 210 est écrit avant le IOException bloc
+1

(+1), juste être explicite sur ConnectionException extension IOException, d'où être attrapé. – Bozho

+0

Je l'ai fait mais il a fait comme avant [:(] – Johanna

+0

@Johanna: Qu'est-ce que vous demandez exactement? Laura a montré comment restructurer votre code pour ne pas avaler l'exception Demandez-vous pourquoi l'exception se passe réellement? – Adamski

Questions connexes