Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SWT после ServerSocket 
V
    Опции темы
JavaNewbie
  Дата 6.2.2012, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.2.2012

Репутация: нет
Всего: нет



Здравствуйте, столкнулся с странной проблемой
Код

import java.io.*;
import java.net.*;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

class SampleServer extends Thread
{
    static Display display;
     static Shell shell;
     static Text stext;

    public static void wind()
    {
         display = new Display();
          shell = new Shell(display);
          stext = new Text(shell, SWT.BORDER | SWT.V_SCROLL);
          stext.setBounds(10,10,300,200);
          shell.setLocation(300,300);
          shell.setText("Server");
          shell.setSize(337,258);
    }
    public static void ad(String SE)
    {
        stext.append(SE+"\n");
    }
    Socket s;
    int num;
     public static void main(String args[])
    {
     wind();
     shell.open();
     ad("123");
     try
        {
         ad("321");
         int i = 0;
         ad("123");
         ServerSocket server = new ServerSocket(4666);
             stext.setText("started");
         ad("server is started");
               while(true)
               {
                new SampleServer(i, server.accept());
                i++;
               }
        }
        
        catch(Exception e)
        {

        } 
        while (!shell.isDisposed()) {
              if (!display.readAndDispatch ()) display.sleep (); 
          } 
        display.dispose ();   
    } 

текст из строк 32, 35, 37 успешно попадает в виджет text при помощи метода ad(строка 22),
но после строки 38
Код

ServerSocket server = new ServerSocket(4666);

в строках 39 и 40 append напрочь отказывается работать. Помогите пожалуйста разобраться.
PM MAIL   Вверх
Dummy
Дата 6.2.2012, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 2
Всего: 19



Я не специалист в SWT, но проблема мне не кажется странной. За обработку SWT-событий отвечает вот этот цикл: 
Код

while (!shell.isDisposed()) {
    if (!display.readAndDispatch ()) display.sleep (); 

display.dispose ();

Пока этот цикл не работает, ваш UI тоже работать корректно не будет. Но в вашем коде управление до цикла может дойти, только если server.accept() выкинет IOException. В противном случае вы будете бесконечно слушать серверный сокет, так и не начав обработку событий UI. 

Решение - выносить работу с ServerSocket в отдельный поток. И не забывайте, что, обновляя UI из "неглавного" потока , необходимо использовать Display.asyncExec() / Display.syncExec(). Вот документация 

Это сообщение отредактировал(а) Dummy - 6.2.2012, 17:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.