Problema: Executar 2 classes em paralelo com thread

1 resposta
R
Servidor:
import java.io.*;
import java.net.*;

/**
 *
 * @author Ricardo
 */
public class ServidorMultiplo implements Runnable {

    private static final int PORTA = 8123;
    private static final int MAX_CONEXOES = 20;
    //private Vector clientesConectados;
    private ServerSocket portaConexao;

    public ServidorMultiplo() {
       try {
          portaConexao = new ServerSocket(PORTA);
       } catch(IOException exc) {
          exc.printStackTrace();
       }
    }


    public void run() {
       Socket novaConexao = null;
       ConexaoCliente novoCliente = null;
       while(true) {
          try {
             novaConexao = portaConexao.accept();
             novoCliente = new ConexaoCliente(novaConexao);
             new Thread(novoCliente).start();

          } catch (IOException exc) {
             exc.printStackTrace();
          }
       }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       ServidorMultiplo novoServidor = new ServidorMultiplo();
                         

       new Thread(novoServidor).start();
    }

}

Anagrama

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class Anagrama {
    

    private static File arquivo;

    private static void leArquivo() {
        try {
            arquivo = new File("c:\catalogo.txt");
            arquivo.createNewFile();
            //le as linhas do arquivo
            FileInputStream fis = new FileInputStream(arquivo);
            BufferedReader br = leStream(fis);
            String s;
            String palavra;
            char vetor[];
            
            while ((s = br.readLine()) != null) {
                palavra = Retira_Espaco(s);

                vetor = new char[palavra.length()];


                /**
                 * metodo que armazena a palavra em vetor
                 */
                Quebra_Palavra(palavra, vetor);

                /**
                 * metodo que cria o anagrama
                 */
                Calcula_Anagrama(vetor, 0);
                Mostra(vetor);
                System.out.println(s);
            }

        } catch (IOException ex) {
            Logger.getLogger(Anagrama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static BufferedReader leStream(FileInputStream fis) {
        InputStreamReader ir = new InputStreamReader(fis);
        BufferedReader in = new BufferedReader(ir);
        return in;
    }

    public static void main(String[] args) throws IOException {

        leArquivo();
        
         
        System.exit(0);
    }// fim main()
    
    private static void Mostra(char[] vetor) throws IOException {
        FileWriter writer = new FileWriter(new File("anagrama.txt"), true);
        PrintWriter saida = new PrintWriter(writer, true);
        saida.println(vetor);
      
        System.out.println("");
    }// fim metodo Mostra()
    /**
     * Este metodo recebe uma palavra e remove todos os espaços entre, durante e
     * no final de qualquer palavra.
     *
     * @param palavra
     * @return palavra_sem_espaços
     */
    private static String Retira_Espaco(String palavra) {
        String alterada = "", interna = (palavra).trim();
        char c;

        for (int i = 0; i < interna.length(); i++) {
            c = interna.charAt(i);
            if (Character.isLetterOrDigit(c)) {
                alterada += c;
            }// if
        }// for

        return alterada;
    }// fim metodo Retira_Espaco()
    /**
     * Este metodo recebe o vetor contendo a palavra e mostra para o usuario
     * todas as possibilidades de anagrama com esta palavra.
     *
     * @param vetor
     */
    private static void Calcula_Anagrama(char vetor[], int k) throws IOException {
        int i;
        if (k == vetor.length - 1) {
            Mostra(vetor);
        } else {
            Calcula_Anagrama(vetor, k + 1);
            i = k + 1;
            while (i < vetor.length) {
                Troca_Posicao(vetor, k, i);
                Calcula_Anagrama(vetor, k + 1);
                Troca_Posicao(vetor, k, i);
                i = i + 1;
            }
        }
    }// fim metodo Calcula_Anagrama()
    /**
     * Este metodo efetua a troca das posições desejadas
     *
     * @param vetor
     * @param i
     * @param k
     */
    private static void Troca_Posicao(char[] vetor, int k, int i) {
        char aux;
        aux = vetor[i];
        vetor[i] = vetor[k];
        vetor[k] = aux;
    }// fim metodo Troca_Posicao()
    /**
     * Este metodo recebe a palavra e um vetor vazio e retorna o vetor contendo
     * a palavra
     *
     * @param palavra
     * @param vetor
     */
    private static void Quebra_Palavra(String palavra, char vetor[]) {
        for (int i = 0; i < vetor.length; i++) {
            vetor[i] = palavra.charAt(i);
        }// for
    }// fim metodo Quebra_Palavra()

}

eu preciso que quando eu execute a classe do servidor a classe anagrama execute em paralelo automaticamente, preciso fazer isso com Threads mas não estou conseguindo fazer direito, coloquei os códigos sem as minhas tentativas. Acredito que preciso chamar o método no main do servidor, mas não sei como fazer o Runnable na classe do anagrama.
Se vocês me derem uma mão fico grato.

1 Resposta

R

Ninguém?

Criado 25 de novembro de 2009
Ultima resposta 26 de nov. de 2009
Respostas 1
Participantes 1