Foros del Web » Programación para mayores de 30 ;) » Java »

es posible llamar a un sockest desde fuera del main??

Estas en el tema de es posible llamar a un sockest desde fuera del main?? en el foro de Java en Foros del Web. Hola a todos Vereis, estoy desarrollando en java una especie de maquina expendedora de cafe para un proyecto para la universidad. El caso es que ...
  #1 (permalink)  
Antiguo 12/05/2009, 05:31
 
Fecha de Ingreso: abril-2009
Mensajes: 80
Antigüedad: 15 años
Puntos: 0
es posible llamar a un sockest desde fuera del main??

Hola a todos

Vereis, estoy desarrollando en java una especie de maquina expendedora de cafe para un proyecto para la universidad.

El caso es que me crei e hize la cafetera con una interfaz grafica usando el netbeans (que con este programa es supersencillo, tu controlas un panel y el te genera el codigo). El problema es que ese cogido generado no es modificable, por lo que ahora mi programa tiene una funcion main que llama a una funcion void run y ahi ya se desarrolla todo lo que quiera añadir.

Bueno todo iba bien hasta que he intentado mediante sockets comunicar la cafetera con un servidor. He probado varias cosas a ver donde estaba el fallo y esto es a lo que he llegado (usando unicamente TCP):

-Desde el main puedo enviar lo que quiera porque llega todo perfecto
-Desde dentro del run (donde estan declarados los botones y demas) no puedo usar el socket.

Puede que lo primero que se os ocurra es decir, bueno tio pues envialo todo desde el main... pero el caso es que necesito la informacion que se extrae del la funcion void run, para ser exactos todo lo que implique interaccion entre usuario y GUI. Y com las funciones que me genera el netbeans de la GUI no son modificables, no puedo de ninguna forma (que yo conozca) retornar la informacion al main(), os recuerdo que el run es de tipo void. Aqui va el codigo del main:
**El netbeans me genero la parte de abajo y yo genere lo de los sockets.**

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

message="";
clientSocket = new Socket("localhost", 6789);
//Bufer de salida hacia el servidor - ESCRITURA
outToServer = new DataOutputStream(
clientSocket.getOutputStream());

outToServer.writeBytes("mensaje de prueba al servidor" + '\n');

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Cafetera().setVisible(true);
}
});

}



**El socket lo inicializo junto con otras variables globales fuera de la clase main de la siguiente forma (por consejo del compilador):**

private static DataOutputStream outToServer;
private static Socket clientSocket;

**Asi es como intento llamar al socket desde dentro de la funcion run:**

System.out.println(message);
try{
outToServer.writeBytes("message");
}catch(Exception e){System.out.println("Error en conexion "+e);}


Al hacer esto antes m salia el error null.pointerException, pero ahora simplemente me ignora esa parte..., el error del null no era por enviar una cadena vacia, ya que puse un system.out y por pantalla el mensaje se imprime correctamente, pero el servidor no recibe nada... (y esta preparado para recibir cosas, xk el mensaje de prueba del main si que le llega), ***de hecho esta preparado de la siguiente forma:***

System.out.println("Todo listo, solo falta que el cliente responda");
clientSentence = inFromClient.readLine();
System.out.println("El cliente ha dicho"+clientSentence);
System.out.println("Todo listo, solo falta que el cliente responda otra vez");
clientSentence = inFromClient.readLine();
System.out.println("El cliente ha seleccionado"+clientSentence);


Con esto recibe el mensaje de prueba del main y lo imprime, pero el mensaje que le mando despues desde la funcion run nada...



Se os ocurre que podria hacer??? yo veo tres opciones,

-O habilitar de alguna forma el socket para que pueda ser utilizado desde fuera del main (cambiando algo en los tipos o inicializando el socket en otro lado).

-Haciendo que algo ekivalente a pasar variables por referencia fuera del run(), como se haria en C++.

-De alguna forma crear una funcion en el main que llame a las funciones de los botones para que me den la informacion que deseo

Pero no se como llevar a cabo mis tres ideas, he probado varias cosas y no soy quien a ello.

Podria alguien ayudarme???

Si necesitais el codigo entero darme vuestro correo y os lo mando, pero el resto son funciones secillas para gestionar como se pulsan los botonoes de la GUI y actuar en funcion

Muchas gracias y un saludo a todos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:21.