Filedialog убивает мою ветку - PullRequest
       16

Filedialog убивает мою ветку

0 голосов
/ 06 декабря 2010

Я работаю над сокетом программой на Java.Я использую GUI с сервером сокетов в фоновом режиме.Сервер socket использует поток , который проверяет сообщения socket каждые 10 мс.Оба они отлично работают вместе, но как только я пытаюсь открыть диалоговое окно «Файл» в gui , происходит сбой gui , но сервер продолжает работать.Я думаю, что я неправильно запускаю сервер (или сервер thread ).Диалоговое окно файла работает нормально, если я пропускаю сокет .

В чем может быть проблема, может быть, я неправильно запускаю поток?в одном классе)

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

(это моя тема)

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;

(и это моя главная)

 static ServerController scon;
 static Controller cn;

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


      }

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Просто догадываюсь здесь, но я думаю, что это имеет отношение к EDT.

Вы пытаетесь запустить диалог извне EDT? http://en.wikipedia.org/wiki/Event_dispatching_thread

Если вы считаете, что это возможно, попробуйте использовать статические методы SwingUtilities (в частности isEventDispatchThread и invokeLater), чтобы устранить и устранить проблему:

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)

НТН

1 голос
/ 07 декабря 2010

Теперь проблема решена. Кажется, проблема была в том, что у меня был сканер, который ожидал ввода (string = sc.next();) каждые 10 мс в потоке, и после нескольких вводов мой GUI показывал. Я удалил сканер, и теперь у меня есть работающее приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...