Java Socket не позволяет показывать поворотный кадр

Это неопределенное поведение в соответствии со стандартом C ++:

Значение E1 & lt; E2 - левые сдвинутые позиции E2; освобожденные биты заполняются нулями. Если E1 имеет неподписанный тип, значение результата E1 × 2 ^ E2, приведенное по модулю больше, чем максимальное значение, представляемое в типе результата. В противном случае, если E1 имеет подписанный тип и неотрицательное значение, а E1 × 2 ^ E2 представляется в типе результата, то это результирующее значение; в противном случае поведение не определено.

1
задан StealthRT 30 March 2019 в 21:54
поделиться

1 ответ

Как уже упоминалось в комментариях read и accept, операции обычно блокируются на Socket.

Вы можете создать собственный Thread, который ожидает сообщения от вашего Socket, а затем изменить графический интерфейс. Имейте в виду, что Swing не безопасен для потоков.

Если мне нужно создать собственный Thread, я использую интерфейс Runnable. Вы можете достичь этого следующим образом:

public class MySocketListener implements Runnable {

    private final GUIClass guiClass;
    private final ServerSocket serverSocket;
    private Socket clientSocket;

    public MySocketListener(GUIClass guiClass, ServerSocket serverSocket) {
        this.guiClass = guiClass;
        this.serverSocket = serverSocket;
    }

    /* Everything that happens in this method, is done on another Thread. */
    @Override
    public void run() {
        try{
            this.clientSocket = this.serverSocket.accept();
            Scanner sc = new Scanner(this.clientSocket.getInputStream());

            while(true) {
                /* Blocking operations */
                this.guiClass.doSomething();
            }
        } catch(IOException ex) {
            ex.printStackTrace();
        }
    }
}

Затем можно легко запустить Thread:

Thread socketListenerThread = new Thread(new MySocketListener(this, serverSocket));
socketListenerThread.start();

Для получения дополнительной информации ознакомьтесь с темой и документация на сокет .

0
ответ дан Moritz Schmidt 30 March 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: