Porque no me funciona el Applet?

AvaloN
24 de Octubre del 2003
Hola!

Estoy haciendo una aplicacion muy sencilla para una web. Esta aplicacion lee de un fichero de texto un conjunto de nombres y los introduce en una lista; ademas tiene un TextArea para buscar, cada vez que presionas una letra se va limitando la lista a los que empiecen por lo que tu has escrito. El problema que tengo esque en el jgrasp con el appletviewer funciona perfectamente, pero cuando lo meto en una web no va nada. Es una clase llamada Huellas.java.

El html que pongo es:

<HTML>
<HEAD>
<TITLE> Mi applet </TITLE>
</HEAD>
<BODY>
<APPLET CODE=Huellas.class WIDTH=250 HEIGTH=400>
Texto mostrado por los navegadores que no entienden Java
</APPLET>
</BODY>
</HTML>

Lo que no se si es, porque uso un metodo llamado getText() del TextArea pero no sera por eso no?? Por si acaso os copio mi codigo fuente, por si acaso lo quereis ver (estoy abierto a cambios):

import java.applet.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.Vector;
import java.io.*;
import java.awt.event.*;

public class Huellas extends Applet implements ActionListener,TextListener{
private int alto=250;
private int ancho=400;

private Color colorFondo=new Color(153,153,153);
private Color colorDegradado=new Color(155,95,69);
private Color colorRectangulo=new Color(0,0,0);
private Color colorTitulo=new Color(255,153,0);

private Font fontTitulo=new Font ("Comic Sans",Font.BOLD,20);

private TextField textoIntroducir=new TextField(15);//Que se puedan meter 15 letras hasta que se desplace
private Button buscar=new Button("Buscar");
private Button restaurar=new Button("Restaurar");
protected List lista=new List(8);//En la lista que se vean 8 lineas

private Vector listaCompleta;
private Vector listaActual;

private int numElementos=0;

public void init(){

setBackground(colorFondo);
setSize(ancho,alto);

GridBagLayout gbl=new GridBagLayout();
GridBagConstraints gbc=new GridBagConstraints();

setLayout(gbl);


gbc.gridheight = 1;
gbc.gridwidth = 1;
add( textoIntroducir,gbc );
gbc.insets = new Insets( 0,10,0,0 );
add( buscar,gbc );
gbc.insets = new Insets( 0,5,0,0 );
add( restaurar,gbc );

gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets( 15,0,0,0 );

//lista.setSize(60,30);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.gridheight = 2;
add( lista,gbc );
try{
crearLista();
}
catch (Exception e){System.out.println(e);}

listaActual=new Vector();
rellenarLista(listaCompleta);

//CREO LOS LISTENERS
restaurar.addActionListener(this);
buscar.addActionListener(this);
textoIntroducir.addActionListener(this);

textoIntroducir.addTextListener(this);
}

//cuando Escribo una letra
public void textValueChanged(TextEvent e){

actionPerformed(new ActionEvent(e,0,"movimiento"));
}

public void actionPerformed(ActionEvent ev){
//Si es el boton restaurar que ponga la lista original y borre el texto de busqda
if(ev.getActionCommand().equals("Restaurar")){
if(lista.getItemCount()!=numElementos){//Que solo restaure si es necesario (cuando no todos los elementos del vector estan en la lista)
textoIntroducir.setText("");
rellenarLista(listaCompleta);
}
}
else{
//Sino tiene que actualizar la lista de opciones
if(textoIntroducir.getText().length()>0||(textoIntroducir.getText().length()==0&&lista.getItemCount()!=numElementos)){
//System.out.println(textoIntroducir.getText());
listaActual=new Vector();
for(int j=0;j<numElementos;j++){
if((cambiarCadena((String)(listaCompleta.elementAt(j)))).startsWith(cambiarCadena(textoIntroducir.getText()))){
listaActual.addElement(listaCompleta.elementAt(j));
}
}
rellenarLista(listaActual);
}
}
}

public void crearLista()throws IOException{
BufferedReader leer=new BufferedReader(new FileReader("huellas.txt"));
listaCompleta=new Vector();
String lectura="";
while(lectura!=null){
if(lectura.length()>0){
numElementos++;
listaCompleta.addElement(lectura.trim());
}
lectura=leer.readLine();
}
}

public void rellenarLista(Vector relleno){
lista.removeAll();
for(int i=0;i<relleno.size();i++){
lista.add((String)(relleno.elementAt(i)));
}
}

public String cambiarCadena(String cadena){
String cadenaCambiada=cadena;
if(cadena!=null){
cadena=(cadena.toLowerCase()).trim();
char letras []=cadena.toCharArray();
for(int k=0;k<cadena.length();k++){
switch(letras[k]){
case 'á': letras[k]='a';
break;
case 'é': letras[k]='e';
break;
case 'í': letras[k]='i';
break;
case 'ó': letras[k]='o';
break;
case 'ú': letras[k]='u';
break;
}
}
cadenaCambiada=new String(letras);
}
return cadenaCambiada;
}

public void paint(Graphics g) {
Graphics2D g2=(Graphics2D) g;

//HAGO EL GRADIENTE
GradientPaint redtowhite = new GradientPaint(0,0,colorDegradado,ancho,alto,colorFondo);
g2.setPaint(redtowhite);
g2.fill(new Rectangle(0, 0, ancho, alto));

//Escribo por encima
g.setFont(fontTitulo);

g.setColor(colorRectangulo);
g.drawString("Huellas",13,28);
g.drawRect(0,0,ancho-1,alto-1);
g.drawRect(1,1,ancho-3,alto-3);

g.setColor(colorTitulo);
g.drawString("Huellas",10,25);

}
}

concorde
24 de Octubre del 2003
Los applet se ejecutan en el cliente, y por ello tienen muchas restricciones de seguridad, entre otras no pueden acceder al sistema de archivos local de la máquina cliente; por lo que veo en el código, intentas abrir un fichero llamado "huellas.txt". No puedes hacer eso, tendrás que ubicar dicho fichero en el servidor y acceder a él mediante una conexión http. En appletviewer te funciona porque tu equipo hace las veces de servidor, además de las de cliente.

AvaloN
24 de Octubre del 2003
Y como hago la conexion http?? Tengo que hacerlo como si fuera un archivo para bajar no? Pero no se hacerlo, si me pudieras ayudar... te lo agradeceria.

concorde
24 de Octubre del 2003
También veo un error java.lang.NullPointerException. Tendría que mirarlo despacio y probarlo, pero ahora mismo no puedo hacerlo. Mañana podré echarle un vistazo más profundo

AvaloN
24 de Octubre del 2003
Quiza te de el java.lang.NullPointerException porque no tienes el archivo "huelllas.txt". Muchas gracias por contestar

concorde
24 de Octubre del 2003
Efectivamente, si cambio y pongo c:/huellas.txt (o cualquier path donde pueda estar el fichero) se elimina el NullPointerException. Si lo haces y pruebas en el explorador, verás que funciona, pero son las mismas circunstancias que en el appletviewer. Si lo despliegas en un servidor Web real es posible que no te funcione. Si quieres conectarte mañana temprano quizás lo pueda probar en un servidor Web y en caso de que no funcione intentar una solución alternativa