1
resposta

Curso Thread 2: Aula 5 Java

Ola a todos. Eu fiz o código certinho do vídeo porém ao iniciar o servidor ocorreu este erro

run:
---- Iniciando Servidor ----
Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
    at java.net.ServerSocket.bind(ServerSocket.java:375)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:128)
    at alura.curso.threadsII.aula5.servidor.ServidorTarefas.<init>(ServidorTarefas.java:19)
    at alura.curso.threadsII.aula5.servidor.ServidorTarefas.main(ServidorTarefas.java:49)
C:\Users\Gustavo\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

Então eu fui até o download da aula e deu o mesmo erro. Alguém sabe o que houve? Vou colocar o código da classe ServidorTarefas.

package alura.curso.threadsII.aula5.servidor;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;

public class ServidorTarefas {

    private ServerSocket servidor;
    private ExecutorService threadPool;
    private AtomicBoolean estaRodando;

    public ServidorTarefas() throws IOException {
        System.out.println("---- Iniciando Servidor ----");
        this.servidor = new ServerSocket(12345);
        this.threadPool = Executors.newFixedThreadPool(4, new FabricaDeThreads());
        this.estaRodando = new AtomicBoolean(true);
    }

    public void rodar() throws IOException {

        while (this.estaRodando.get()) {

            try {
                Socket socket = this.servidor.accept();
                System.out.println("Aceitando novo cliente na porta " + socket.getPort());

                DistribuirTarefas distribuirTarefas = new DistribuirTarefas(threadPool, socket, this);

                this.threadPool.execute(distribuirTarefas);
            } catch (SocketException e) {
                System.out.println("SocketException, está rodando? " + this.estaRodando);
            }
        }
    }

    public void parar() throws IOException {
        this.estaRodando.set(false);
        this.threadPool.shutdown();
        this.servidor.close();
        System.out.println("Parando servidor");
    }

    public static void main(String[] args) throws Exception {
        ServidorTarefas servidor = new ServidorTarefas();
        servidor.rodar();
    }

}
1 resposta

Boa tarde Gustavo,

Esse erro em geral rola quando você tenta usar uma porta que já está sendo usada, ou não foi desalocada desde o último uso.

Vi que você usa a porta 12345. Tenta mudar o número pra algo diferente disso.

Avisa aí se der certo.

Abraço!