2010-12-06 22 views
0

Im travaillant sur un socket programme en Java. Im exécutant GUI avec un serveur de socket en arrière-plan. Le serveur socket exécute un thread qui vérifie socket messages toutes les 10ms. Les deux fonctionnent bien ensemble mais dès que j'essaie d'ouvrir ma boîte de dialogue Fichier dans le gui , le gui se bloque, mais le serveur continue à fonctionner. Im pensant que je cours le serveur (ou le serveur fil) dans un mauvais sens. La boîte de dialogue de fichier fonctionne très bien si je saute la prise .fileDialog tue mon fils

Quel pourrait être le problème, pourrait-il que Im courir le fil dans un mauvais sens?

(ce dans une classe)

public ServerController(){ 
     ServSocket st = new ServSocket(); 
    Thread thread1=new Thread(st); 
    thread1.start(); 
    } 

(c'est mon fils)

public void run(){ 
    while (true) { 
     try { 
      Thread.sleep(10); 
     } 
     catch (InterruptedException e) {} 

     switch (Status) { 
     case CONNECTED: 
      try { 

       socket = new Socket(hostIP, port); 
       System.out.println("Connected on: " + hostIP + port); 

       out = new PrintWriter(socket.getOutputStream(), true); 
       changeStatus(STARTSENDING, true); 
      } 
      catch (IOException e) { 
       System.out.println("disconnected"); 
      } 
      break; 

(ce qui est mon principal)

static ServerController scon; 
static Controller cn; 

public static void main(String[] args) { 
    scon = new ServerController(); 
     cn = new Controller(); 
    cn.gui(); 


     } 
+0

Votre code est incomplet et il est difficile de dire ce qui s'y passe. – khachik

+2

Un peu plus d'informations sur les "crashs gui" nécessaires (exception? Freeze?) –

+0

Le Gui se bloque, mais le serveur fonctionne bien, aucune exception ou message d'erreur quoi que ce soit, quelle autre partie du code pourrait être utile? – Handsken

Répondre

1

Le problème est maintenant résolu. Semble que le problème était que j'avais un scanner qui attendait l'entrée (string = sc.next();) toutes les 10ms dans le fil, et après quelques entrées mon interface graphique a montré. J'ai retiré le scanner et j'ai maintenant une application de travail.

2

juste deviner ici, mais je pense que c'est lié à l'EDT.

Essayez-vous de lancer la boîte de dialogue de l'extérieur du EDT? http://en.wikipedia.org/wiki/Event_dispatching_thread

Si vous pensez que vous pourriez être, essayez d'utiliser SwingUtilities méthodes statiques (spécifiquement isEventDispatchThread et invokeLater) pour affûter et corriger le problème:

http://java.sun.com/javase/6/docs/api/javax/swing/SwingUtilities.html#isEventDispatchThread()

http://java.sun.com/javase/6/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)

HTH