Java - Por que puede ser que varie la ejecucion??...

 
Vista:

Por que puede ser que varie la ejecucion??...

Publicado por [SLiM] (11 intervenciones) el 21/09/2005 15:37:46
Por que varia la ejecucion de un codigo si este no cambia???, hay veces que me carga el texto (como deberia ser) y hay veces que carga todo menos el texto que se le indica, siendo siempre el mismo codigo!... Como podria solucionar eso??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Por que puede ser que varie la ejecucion??...

Publicado por Julian (27 intervenciones) el 21/09/2005 17:18:00
donde hay un error, el error esta siempre.
el tema es que los errores se generan a partir
de circunstancias. seguramente si a veces te
anda y a veces no, es porque cuanto te anda
no pasaste por el error.
"Como podria solucionar eso??"
con decir "a veces carga el texto y a veces no lo carga"
nadie te va a poder ayudar..
copia parte del codigo o se mas especifico en el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por que puede ser que varie la ejecucion??...

Publicado por [SLiM] (11 intervenciones) el 21/09/2005 17:30:32
Bueno, un metodo levanta una ventana con ciertas caracteristicas(ancho,largo,texto) por ejemlo. Al ejecutar este metodo de 5 veces que lo compilo y ejecuto solo 3 se ejecuta correctamente las otras 2 carga (ancho,largo) pero el texto ni aparece...

No da error simplemente no aparece, y siempre pasa por los mismo lugares al compilar no depende de nada, aqui les dejo el codigo... a ver si podrian orientarme...

esta es la clase...


import java.util.ArrayList;


import java.awt.*;
import javax.swing.BorderFactory;
import javax.swing.JEditorPane;
4

import uni.robot.Mundo;


/**
* Esta clase representa la abstraccion de un mundo real, y caracteriza el
* ambiente de convivencia y trabajo de los robot.
* <p>
* El mundo es plano, y esta conformado por calles y avenidas(filas y columnas),
* rodeado de paredes de NEUTRONIUN impenetrables.
* <p>
* Ademas tiene un area de texto donde se pueden escribir frases, y cambiar los
* colores de las letras.
*
**/
public class MundoConTexto extends Mundo {


/**
* Constructor
* @param texto El texto a usarse en el area de texto.
* @param tituloMundo String Frase utilizada en la barra de titulo de la ventana
* @param cantFilas int La cantidad de filas del mundo.
* @param cantColumnas int La cantidad de columnas del mundo.
*/
public MundoConTexto(String texto, String tituloMundo, int cantFilas,
int cantColumnas) {
super(tituloMundo, cantFilas, cantColumnas);
this.texto = texto;
setTexto(this.texto);


}


/**
* Cambia el color de la letra en la posicion especificada de la frase.
*
* @param c Color El nuevo color de la letra.
* @param indice int La posición de la letra.
*/
public void setColor(Color c, int indice) {


//Valido el indice
if (indice < 0 | indice > texto.length()) {
throw new RuntimeException(
"El número está fuera de rango!\nMayor que el tamaño de la palabra, o negativo");
}


/*Valido el parametro color*/
if ((c.getRed() < 0 | c.getRed() > 255)
| (c.getGreen() < 0 | c.getGreen() > 255)
| (c.getBlue() < 0 | c.getBlue() > 255)) {
throw new RuntimeException(
"Color Incorrecto.");
}


//Actualizo el color
this.arrayColores.set(indice, c);


//reescribo la frase
textArea.setText(armarTextoHtml());


}


/**
* Retorna el texto contenido en el area de texto
*
* @return String texto contenido en el area de texto
*/
public String getText() {
return this.texto;
}


/**
* Sobrescribo el metodo de la clase superior para poder agregar el canvas
* nuevo.
*/
protected void configurarVentana() {
super.configurarVentana();


this.textArea = new JEditorPane("text/html", "") {
//Pequeño hacking para paliar el flicker del area de texto.
public void repaint() {}


public void paintComponent(Graphics g) {
super.paintComponent(g);
super.repaint();
}


};


//Por un problema de superposicon de contructores inicializo estos
//valores fuera del constructor.
this.textArea = new JEditorPane("text/html", "");
this.textArea.setBackground(Color.WHITE);
this.textArea.setEditable(false);
this.texto = "";


this.arrayColores = new ArrayList();


//Cambio el orden de los paneles, primero StyleTextArea y despues canvas
this.remove(this.canvas);


//Se añade un borde.
this.textArea.setBorder(BorderFactory.createEmptyBorder(1, 10, 1, 10));
textArea.setDoubleBuffered(true);


//Manejo de layout (En este caso usamos GridBagLayout)
GridBagLayout gb = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gb);
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.NORTHWEST;
c.gridy = 0;
c.gridx = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
this.textArea.setMinimumSize(new Dimension(baseMundo, 10));
gb.setConstraints(this.textArea, c);
add(this.textArea);


c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.SOUTHWEST;
c.gridy = 1;
c.gridx = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
gb.setConstraints(this.canvas, c);
add(this.canvas);


pack();
}


/**
* Cambia el texto en el area de texto.
*
* @param texto String El nuevo texto.
*/
private void setTexto(String texto) {


//cargo el arreglo de colores
this.arrayColores = coloresPorDefecto(this.arrayColores);


textArea.setText(armarTextoHtml());
pack();
setSize(Math.max(textArea.getWidth(), baseMundo),
alturaMundo + textArea.getHeight());
alinearEnPantalla();


}


/**
* Convierte colores a formato hexadecimal necesario para HTML.
*
* @param color Color Un objeto color de la clase Color (java.awt.color)
* @return String el color en formato hexadecimal (listo para usar en HTML)
*/
private String colorAHexadecimal(Color color) {
return "#" + toHexString(color.getRed()) +
toHexString(color.getGreen()) +
toHexString(color.getBlue());
}


/**
* Sobrescribe el metodo toHexString.
* Completa los colores. Cuando un color es 0 se concatena a 00.
*
* @param color int
* @return String
*/
private String toHexString(int color) {
String s = Integer.toHexString(color);
if (s.length() < 2) {
s = '0' + s;
}
return s;
}


/*
* Inicializo todas las posiciones del arreglo con el color por defecto: Negro.
*
* @param arrayColores ArrayList El arreglo donde cargar todos los colores.
*/
private ArrayList coloresPorDefecto(ArrayList arrayColores) {
for (int i = 0; i < texto.length(); i++) {
arrayColores.add(new Color(0, 0, 0));
}
return arrayColores;
}


/*
* Metodo encargado de armar el html encargado de los colores en el area de texto.
* Vease que el area de texto en realidad es un JLabel, y este tipo de componente
* soporta HTML.
*
* @return String El string completo con el codigo html y los colores incluidos.
*/
private String armarTextoHtml() {
StringBuffer sb = new StringBuffer();
sb.append("<html><p>");
Color viejo = null;
String cerrarFont = "";
for (int i = 0; i < this.texto.length(); i++) {
Color nuevo = (Color)this.arrayColores.get(i);
if (nuevo.equals(viejo)) {
sb.append(this.texto.charAt(i));
} else {
sb.append(cerrarFont + "<font color='" +
colorAHexadecimal(nuevo) +
"'>" + this.texto.charAt(i));
cerrarFont = "</font>";
}
viejo = nuevo;
}
sb.append(cerrarFont + "<p></html>");
return sb.toString();


}


//Atributos privados
private JEditorPane textArea;
private String texto;
private ArrayList arrayColores;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por que puede ser que varie la ejecucion??...

Publicado por [SLiM] (11 intervenciones) el 21/09/2005 17:31:46
esta es la otra clase

import uni.robot.*;
import java.awt.event.*;
import java.awt.Color;


public class RobotJugador extends Robot implements KeyListener {
public RobotJugador(Mundo miMundo, int fila, int columna, int dirInicial,
int cantidadMaxima, int cantConos) {
super(miMundo, fila, columna, dirInicial, cantidadMaxima, cantConos);


}


public void keyPressed(KeyEvent e) {


}


public void keyReleased(KeyEvent e) {


}


public void keyTyped(KeyEvent e) {


char[] textoCaracteres = new char[texto.length()];
texto.getChars(0, texto.length(), textoCaracteres, 0);
if (e.getKeyChar() != e.VK_BACK_SPACE) {
if (e.getKeyChar() == textoCaracteres[contador] &&
mundo.getCantidadFilas() - 1 != player.getFila()) {
contador++;
totalTeclas++;
teclasCorrectas++;
mundo.setColor(new Color(0, 128, 0), contador - 1);
cont++;
if (cont == 2) {
avanzar();
cont = 0;
}
if ((mundo.getCantidadFilas() - 1 == player.getFila() &&
player.getDireccion() == SUR) ||
(player.getColumna() == 0 && player.getDireccion() == OESTE) ||
(player.getFila() == 0 && player.getDireccion() == NORTE)) {
mundo.mostrarMensaje("Perdiste!");
}
if (mundo.getCantidadColumnas() - 1 == player.getColumna()) {
acuraccy = ((teclasCorrectas * 100) / totalTeclas);
if (acuraccy > 70) {
mensaje = excelente;
}
if (acuraccy > 45 && acuraccy < 70) {
mensaje = medio;
}
if (acuraccy < 45) {
mensaje = mal;
}


mundo.mostrarMensaje(
"Juego Terminado \n\n Total de teclas presionadas: " +
totalTeclas +
"\n Total de teclas correctas: " +
teclasCorrectas + "\n Total de Errores: " + errores +
"\n Precision: " +
acuraccy + "%" + "\n\n" + mensaje + "\n ");
nextLevel();
}
} else {


girarDerecha();
mundo.setColor(new Color(255, 0, 0), contador);
totalTeclas++;
errores++;
}
} else {
girarIzquierda();
mundo.setColor(new Color(0, 0, 0), contador);
totalTeclas++;
}


}


public static void jugar() {
mundo.addKeyListener(player);


}


public void nextLevel() {
level++;
mundo = new MundoConTexto(texto, "World Game Level 2", 5, columnas);
player=null;
player = new RobotJugador(mundo, 2, 0,
Robot.ESTE, 0, 0);
mundo.addKeyListener(player);


}


public void mirarHacia(int direccion) {
while (getDireccion() != direccion) {
this.girarIzquierda();
}
}


public static String texto() {
return texto;
}


private static String[] easy = {
"Un gallego llama a la operadora de beepers",
"- Quiero enviar un mensaje al señor Pablo Hernández.",
"- ¿Qué desea decirle?", "- Que se dejó el beeper en mi casa."};
private static int level = 1;
private static String texto = easy[level];
static int cont = 0;
private static int contador = 0;
private static int columnas = (texto.length() / 2) + 1;
private static MundoConTexto mundo = new MundoConTexto(texto, "Game World",
5, columnas);
private static RobotJugador player = new RobotJugador(mundo, 2, 0,
Robot.ESTE, 0, 0);
private int errores = 0;
private int totalTeclas = 0;
private int teclasCorrectas = 0;
private int acuraccy = 0;
private String mensaje;
private String excelente = "Excelente precision!";
private String medio = "No esta mal!, pero puedes mejorarlo";
private String mal =
"Oh Dear!, Conozco un Oculista que te podria recetar unos buenos lentes";
}





y aqui esta el main...


//import uni.robot.*;


/* Alumno: _____________________________
* Introduccion a la Programacion II
* FIUNI
*/


/** Esta clase contiene el metodo main() para ejecutar
* su programa de robot.
*/


public class MiPrograma {


public static void main(String[] args) {
RobotJugador.jugar();


}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Por que puede ser que varie la ejecucion??...

Publicado por Wilfredo Vargas Almendras (314 intervenciones) el 21/09/2005 20:23:53
Hola ... sera que me puedes enviar tu codigo a mi correo, asi el ayudarte sera mas sencillo para mi...
SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar