Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

EuToComProblema!

problema RMI

Recommended Posts

Boa noite pessoal.

 

Estou com um problema com o RMI, as vezes ele não envia as informações que ele deveria, mas não ocorre erro, erro ocorre apenas quando eu tento acessar estas informações não enviadas...

 

teria como eu fazer alguma coisa tipo:

 

while(nao_enviou)

envia_denovo

 

??

 

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ixi o código é bem grande.

peguei um pronto para alterar pensando que ia ser fácil e me dei mal.

 

vou tentar simplificar...

 

 

        ArrayList players = new ArrayList();
        try {
            players = server.getOtherPlayers(sonic.playerNumber);//método remoto que retorna os outros jogadores
            int totalPlayersObjective = server.getTotalPlayersObjective();
            while(totalPlayersObjective != server.getTotalPlayers()) {//inicia o jogo apenas quando todos estiverem online (parametro da tela anterior)
                totalPlayersObjective = server.getTotalPlayersObjective();
                players = server.getOtherPlayers(sonic.playerNumber); //precisa disso se nao os primeiros jogadores ficam com a lista errada
            }
            otherPlayers = new Sonic[totalPlayersObjective-1];
            for(int i=0;i<=players.size()-1;i++){ //aki seto as propriedades que me interessam dos outros jogadores, ao acessar esta variavel em outro método, as vezes tenho o erro ExceptionNullPointer
                Sonic s1 = (Sonic) players.get(i);
                otherPlayers[i] = s1;
                otherPlayers[i].pict = new ImageIcon(this.getClass().getResource(s1.personagem+"_right.gif")).getImage();
                otherPlayers[i].pict2 = new ImageIcon(this.getClass().getResource(s1.personagem+"_left.gif")).getImage();
                if (otherPlayers[i].right)
                    bufferGraphics.drawImage(otherPlayers[i].pict,(otherPlayers[i].x - (otherPlayers[i].frame*48))-camera_x,(otherPlayers[i].y - (otherPlayers[i].rotation*48))-camera_y,this);
                else
                    bufferGraphics.drawImage(otherPlayers[i].pict2,(otherPlayers[i].x - (otherPlayers[i].frame*48))-camera_x,(otherPlayers[i].y - (otherPlayers[i].rotation*48))-camera_y,this);
            }
        } catch (RemoteException ex) {
            Logger.getLogger(JavaSonic.class.getName()).log(Level.SEVERE, null, ex);
        }

 

em outro método, ao acessar otherPlayers as vezes me vem o erro. o erro tb ocorre de vez enquando no código acima.

                    otherPlayers[i].pict = new ImageIcon(this.getClass().getResource(otherPlayers[i].personagem+"_right.gif")).getImage();
                    otherPlayers[i].pict2 = new ImageIcon(this.getClass().getResource(otherPlayers[i].personagem+"_left.gif")).getImage();

aqui o método do server

    public void setPlayer(String character, String clientAddress) {
        Sonic s = new Sonic(character,totalPlayersNow);
        s.playerNumber = this.totalPlayersNow;
        players.add(s);
        this.totalPlayersNow++;
    }

    public ArrayList getOtherPlayers(int characterCode) {
        ArrayList retorno = new ArrayList();
        for(int i=0;i<players.size();i++) {
            Sonic otherPlayer = (Sonic)players.get(i); //players eh um array list do server com todos os jogadores
            if(otherPlayer.playerNumber != characterCode)
                retorno.add(otherPlayer);
        }
        return retorno;
    }

    public int getTotalPlayers() {//jogadores conectados
        return this.totalPlayersNow;
    }

    public int getTotalPlayersObjective() {// total que deve ter, no inicio se seta quantos 1..3
        return this.totalPlayersObjective;
    }

    public RMIInterface getServer() {
        return JavaSonic.server;
    }

    public ArrayList getOtherPlayers(int characterCode) {
        ArrayList retorno = new ArrayList();
        for(int i=0;i<players.size();i++) {
            Sonic otherPlayer = (Sonic)players.get(i);
            if(otherPlayer.playerNumber != characterCode)
                retorno.add(otherPlayer);
        }
        return retorno;
    }

como é coisa que as vezes acontece as vezes não, só pode ser respostas do server que não chegam ao cliente, e gostaria de tratar isso.

ta me tirando mó tempo ficar fechando e abrindo o programa até as coisas serem enviadas corretamente.

 

 

Como disse o código é bem grande... se tiverem alguma dúvida sobre meu problema... vou tentar responder.

obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.