Foro de elhacker.net

Programación => Java => Mensaje iniciado por: AlterMundis en 23 Enero 2013, 13:29 pm



Título: Problema con Threads al pasar un dato mediante argumentos
Publicado por: AlterMundis en 23 Enero 2013, 13:29 pm
Hola amigos, me presento soy AlterMundis y quiero que me ayudéis a solucionar un problema.
Tengo el siguiente código:

Código
  1. class controladorRaton implements Runnable {
  2.        ServerSocket raton;
  3.        Socket ratonConector;
  4.        Point nuevoPunto;
  5.        DataOutputStream salidaDatos;
  6.  
  7.        public void run() {
  8.            try {
  9.                this.inicializar();
  10.                while(true){
  11.  
  12.                        salidaDatos.write(nuevoPunto.x);
  13.                        salidaDatos.write(nuevoPunto.y);
  14.  
  15.                }
  16.            } catch (IOException ex) {
  17.                        System.out.println("Problema al enviar los datos.");
  18.            }
  19.        }
  20.  
  21.        void inicializar() throws IOException{
  22.           raton = new ServerSocket(668);
  23.           ratonConector = raton.accept();
  24.           salidaDatos = new DataOutputStream(ratonConector.getOutputStream());
  25.        }
  26.        void obtenerDatosRaton(int x, int y){
  27.            nuevoPunto.setLocation(x, y);
  28.        }
  29.    }  
  30. }
  31.  

Y lo que hago es pasar las coordenadas del ratón usando el siguiente código, que esta definido en una clase aparte, otro thread (implements Runnable):

Código
  1. lblImg.addMouseMotionListener(new MouseMotionListener() {
  2.                    @Override
  3.                    public void mouseMoved(MouseEvent evt) {
  4.                        controladorHardware.obtenerDatosRaton(evt.getX(), evt.getY());
  5.                    }
  6.                    @Override
  7.                    public void mouseDragged(MouseEvent evt) {
  8.  
  9.                    }
  10.                    });
  11.  
Los threads, han sido llamados así, usando el siguiente procedimiento (uno que se encarga de enviar imagenes del escritorio al usuario y el otro que transmite clicks para poder hacer un escritorio remoto:

Código
  1. if (t == null){
  2.                        t = new Thread(this, "ServidorImagenes");
  3.                        hiloRaton = new Thread(controladorHardware, "ServidorHardware");
  4.                        t.start();
  5.                        hiloRaton.start();
  6.                }
  7.  

Es decir, lo que hace es arrancar el thread de un jframe que recoge los datos del ratón y se los pasa al otro thread que es el encargado de hacer la transferencia al servidor remoto.

Me da este error cada vez que se ejecuta la linea
Código
  1.   controladorHardware.obtenerDatosRaton(evt.getX(), evt.getY());
es decir, cada vez que muevo el ratón por el componente que esta a la escucha de las coordenadas. Se por seguro que funciona bien el evento pues por pantalla puedo mostrar las coordenadas en las que se encuentra mi ratón sobre el componente, pero en el momento de pasarlo al otro thread, dice esto:

Código:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

En la linea que os he explicado.

Espero que podáis ayudarme pues estoy desesperado y no se que diablos pasa!
Gracias de antemano!


Título: Re: Problema con Threads al pasar un dato mediante argumentos
Publicado por: Nasty35 en 23 Enero 2013, 17:37 pm
En la clase controladorRaton debes crear un constructor, y en el definir a la variable nuevoPunto(Point), creo que ese es el error, pero no estoy seguro, no he tocado mucho eso...
Código
  1. public controladorRaton() {
  2.    this.nuevoPunto = new Point();
  3. }
Como no le has dado ningún valor a nuevoPunto está vacío, por lo tanto te dará el fastidioso error de NullPointerException (Cuando empezé en Java este error me mataba).


Título: Re: Problema con Threads al pasar un dato mediante argumentos
Publicado por: AlterMundis en 23 Enero 2013, 22:50 pm
En la clase controladorRaton debes crear un constructor, y en el definir a la variable nuevoPunto(Point), creo que ese es el error, pero no estoy seguro, no he tocado mucho eso...
Código
  1. public controladorRaton() {
  2.    this.nuevoPunto = new Point();
  3. }
Como no le has dado ningún valor a nuevoPunto está vacío, por lo tanto te dará el fastidioso error de NullPointerException (Cuando empezé en Java este error me mataba).
No funciona :(
Al parecer, según veo en mi código, si esta inicializador, por la misma función :O

Saludos y gracias por tu tiempo!