Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ChicoTolerante

#1
Java / Problema con Applet (magic number ...)
2 Marzo 2013, 11:57 AM
Hola!

Estoy intentando colgar un Applet de Java en un documento HTML, pero me produce un error. Lo he probado en Google Chrome y en Firefox, pero nada... He actualizado el plugin para el Chrome. Pero el error sigue siendo el mismo:

Error de la Aplicación:
ClassFormatError
Incompatible magic value 1768779887 in class file <nombre_del_fichero>

¿Qué le pasa? He hecho caso a lo que hay por ahí: el código del HTML y el código del ".class". Voy a colgarlos aquí, pero no creo que esté ahí el fallo:

Código del Applet:
Código (java) [Seleccionar]

import java.applet.Applet;
import java.awt.*;

public class AppletTemplate extends Applet
{

private int width;
private int height;

@Override
public void init()
{
setBackground(Color.BLUE);
setForeground(Color.YELLOW);
width = getWidth();
height = getHeight();
}

@Override
public void paint(Graphics g)
{
g.drawLine(0,0,width, height);
}
}


Código del HTML:
Código (html4strict) [Seleccionar]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<tittle>Plantilla para cargar Applets</tittle>
</head>
<body>
<h1>Aqui el Applet:</h1>
<p>

<applet code="AppletTemplate.class" width="200" height="200">
<b>Error! Debes usar un navegador apto para Java</b>
</applet>

</body>
</html>


No entiendo qué esta fallando... ¿Alguien me podría ayudar? Gracias de todos modos
#2
Hola!

Estoy INTENTANDO hacer un chat. El problema lo tengo para actualizar los mensajes enviados y el texto que debe aparecer en el JTextArea. Entonces, tengo lo siguiente, esencialmente:

Código (java) [Seleccionar]

Fichero 1: clase InterfazDelChat
public class InterfazDelChat extends JFrame implement ActionListener
{
public static JTextArea areaChat = new JTextArea("Titulo del JTextArea del chat\n\n", 50, 50);
public static JButton conec = new JButton("Conectar");
public InterfazDelChat()
{
super("Titulillo");
getContentPane().add(areaChat);
getContentPane().add(conec);
areaChat.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ev)
{
new ServidorDelChat;
}
public static void main(String[]args)
{
new InterfazDelChat();
}
}


Fichero 2: clase ServidorDelChat
Código (java) [Seleccionar]

public static class ServidorDelChat
{
public ServidorDelChat()
{
//Codigo del socket hasta el punto de DataInputStream tenerlo en el String mensajeRecibido)
while (desconectado != true)
{
//Lo que yo creia que tenia que poner:
InterfazDelChat.areaChat.append("\nCliente dice:\n" + mensajeRecibido + "\n");
}
/*Lo que ocurre, cuando pongo esto, es que el texto no llega a la interfaz, al JTextArea
del programa, hasta que no ha completado el bucle
(cuando pongo un numero de opciones finito,
no como el que esta puesto aqui,
si pongo 3, envia 3 mensajes diferentes...),
porque si quiero que esto se pueda repetir, ¿tendre que meterlo en un bucle, no?
El caso es que me lo imprime, y me lo imprime bien, pero tarde.
No me lo imprime en la pantalla, en el caso de poner 3 como fin del bucle,
hasta que no ha superado el bucle, no carga el texto
(no carga el texto de linea en linea, carga solo al final del bucle todos los mensajes acumulados...*/
}
}


He imaginado que la clase InterfazDelChat no se vuelve a cargar hasta que acaba con el bucle, que termina el objeto, y así vuelve a cargar los demás objetos. Entonces... mi pregunta sería:
   - ¿Cómo puedo cargar el JTextArea de la clase InterfazDelChat desde la otra clase ServidorSocket? ¿O cómo puedo cargar de nuevo un objeto, o actualizarlo, estando este en una, y queriendo cargarlo desde otra?

He estado buscando y probando diversas cosas, pero nada surgio efecto... Gracias por todo!!
#3
Java / Actualizar JTextArea desde otra clase
27 Febrero 2013, 02:05 AM
Hola!

Estoy INTENTANDO hacer un chat. El problema lo tengo para actualizar los mensajes enviados y el texto que debe aparecer en el JTextArea. Entonces, tengo lo siguiente, esencialmente:

Código (java) [Seleccionar]

Fichero 1: clase InterfazDelChat
public class InterfazDelChat extends JFrame implement ActionListener
{
public static JTextArea areaChat = new JTextArea("Titulo del JTextArea del chat\n\n", 50, 50);
public static JButton conec = new JButton("Conectar");
public InterfazDelChat()
{
super("Titulillo");
getContentPane().add(areaChat);
getContentPane().add(conec);
areaChat.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ev)
{
new ServidorDelChat;
}
public static void main(String[]args)
{
new InterfazDelChat();
}
}


Fichero 2: clase ServidorDelChat
Código (java) [Seleccionar]

public static class ServidorDelChat
{
public ServidorDelChat()
{
//Codigo del socket hasta el punto de DataInputStream tenerlo en el String mensajeRecibido)
while (desconectado != true)
{
//Lo que yo creia que tenia que poner:
InterfazDelChat.areaChat.append("\nCliente dice:\n" + mensajeRecibido + "\n");
}
/*Lo que ocurre, cuando pongo esto, es que el texto no llega a la interfaz, al JTextArea
del programa, hasta que no ha completado el bucle
(cuando pongo un numero de opciones finito,
no como el que esta puesto aqui,
si pongo 3, envia 3 mensajes diferentes...),
porque si quiero que esto se pueda repetir, ¿tendre que meterlo en un bucle, no?
El caso es que me lo imprime, y me lo imprime bien, pero tarde.
No me lo imprime en la pantalla, en el caso de poner 3 como fin del bucle,
hasta que no ha superado el bucle, no carga el texto
(no carga el texto de linea en linea, carga solo al final del bucle todos los mensajes acumulados...*/
}
}


He imaginado que la clase InterfazDelChat no se vuelve a cargar hasta que acaba con el bucle, que termina el objeto, y así vuelve a cargar los demás objetos. Entonces... mi pregunta sería:
  - ¿Cómo puedo cargar el JTextArea de la clase InterfazDelChat desde la otra clase ServidorSocket? ¿O cómo puedo cargar de nuevo un objeto, o actualizarlo, estando este en una, y queriendo cargarlo desde otra?

Gracias por todo!!!
#4
Java / SocketServer y compañeros
24 Febrero 2013, 17:57 PM
¡Hola buenas!
Agradecería un montón (y parte del otro) si me pudieran tender una mano con un problemilla de sockets. Estoy ideando un chat, pero ocurre que lo consigo abrir, consigue recibir UN mensaje, pero no controlo suficiente con los threads (si es que es ahí donde está la clave) como para mantener la comunicación abierta entre cliente y servidor y poder prolongar la conversación. Antaño me funcionó, pero ahora que lo estoy haciendo más "limpio", no recuerdo cómo...

El código que tengo es el siguiente:
Código (java) [Seleccionar]

import java.lang.*;
import java.io.*;
import java.net.*;

public class ServidorDelChat extends Thread
{
public static ServerSocket socketServidor;
public static Socket socketConexion;
public static DataOutputStream salidaServidor;
public static BufferedReader entradaServidor;
public static int puerto;

//Clase para hablar
    public class HablarDesdeServidor extends Thread
        {
        //CONSTRUCTOR DE HILO para hablar
        public void run()
        {
            try{
                salidaServidor = new DataOutputStream(socketConexion.getOutputStream());
                System.out.println("salidaServidor = new DataOutputStream(socket.getOutputStream());");
                salidaServidor.writeUTF(InterfazDelChat.fieldMensaje.getText());
            }catch(Exception exc) {
                InterfazDelChat.areaChat.append("\nError al ENVIAR el mensaje.\n");}
            }
        }

    //Clase para escuchar
    public class EscucharDesdeServidor extends Thread
        {
        //CONSTRUCTOR DE HILO para escuchar
        public void run()
            {
            System.out.println("\nLa clase Thread.EscucharDesdeServidor SÍ FUNCIONA.");
            System.out.println("Valor de ServerSocket socketServidor: " + socketServidor);
                try{
                    entradaServidor = new BufferedReader(new InputStreamReader(socketConexion.getInputStream())); //Coge el InputStream, lo pone en un lector y el resultado en un búffer.
                    InterfazDelChat.areaChat.append("\nLa otra persona dice...\n" + entradaServidor.readLine() + "\n");
                }catch(Exception exc){
                    InterfazDelChat.areaChat.append("\nError al RECIBIR el mensaje.\n");}
               
            }
        }

    //Clase para conectar
    public class ConectarDesdeServidor extends Thread
        {
        //CONSTRUCTOR DE HILO para conectar
        public void run()
            {
            System.out.println("La clase Thread.ConectarDesdeServidor SÍ FUNCIONA.");
            try{
                puerto = Integer.parseInt(InterfazDelChat.fieldPuerto.getText());
                socketServidor = new ServerSocket(puerto, 2);
               
                socketConexion = new Socket();
                System.out.println("Parámetro de ServerSocket(puerto): " + puerto);
                System.out.println("Valor de ServerSocket socketServidor: " + socketServidor);
                System.out.println("Valor de Socket socket: " + socketConexion);
               
                socketConexion = socketServidor.accept(); //Aquí espera a que alguien haga la petición. La petición se inicia en el envío del primer mensaje.
               
                InterfazDelChat.fieldDireccionLocal.setText("" + socketConexion.getLocalSocketAddress());
                InterfazDelChat.fieldDireccionRemota.setText("" + socketConexion.getRemoteSocketAddress());
               
                System.out.println("Dirección socket local: " + socketConexion.getLocalSocketAddress());
                System.out.println("Dirección socket remoto: " + socketConexion.getRemoteSocketAddress());
                System.out.println("Valor de (socket = socketServidor.accept()): " + socketConexion);
               
               
               
                System.out.println("Ahora, se supone, estamos enlazados.");
                InterfazDelChat.fieldAyuda.setText("Conectado.");
            }catch(Exception exc) {
                }
            }
        }

    //Clase para desconectar
    public class DesconectarDesdeServidor extends Thread
        {
        //CONSTRUCTOR DE HILO para desconectar
        public void run()
            {
            try{
                socketConexion.close();
                entradaServidor.close();
                salidaServidor.close();
            }catch(Exception exc) {
                }
            }
        }
//CONSTRUCTOR
public ServidorDelChat()
    {
    System.out.println("El método constructor de ServidorDelChat() SÍ funciona.");
        (new ConectarDesdeServidor()).run();
        (new EscucharDesdeServidor()).run();   
    }
   
}



He probado introduciendo bucles en la clase para conectar y en la clase para hablar, pero no hay manera... no se me ocurre nada. Cualquier consejo será de gran ayuda.
¡Gracias, sois muy cracks! ;)