Foro de elhacker.net

Programación => Java => Mensaje iniciado por: andrex.125 en 18 Octubre 2013, 06:25 am



Título: Applet en java no termina ejecucion
Publicado por: andrex.125 en 18 Octubre 2013, 06:25 am
Hola, estoy haciendo un Applet en java que gráfica la función F(x) = x,  osea una recta, ya termine el ejercicio lo pruebo y funciona, el problema mio es que el applet nunca termina y por esta razón no gráfica la recta. quisiera que me pudiera ayudar si saben como solucionarlo. Gracias.

Código:

import java.applet.Applet;
import java.awt.*;
import javax.swing.JOptionPane;

public class AppletGrafica extends Applet {

    int x1[] = new int[5];

    public void init() {
       

    }

    public static void ejeXyY(Graphics a) {
        a.setColor(Color.black);
        a.drawLine(50, 275, 500, 275);//eje x
        a.drawLine(275, 50, 275, 500);//eje y
        a.setColor(Color.red);

    }

    public static void divisionPlano(Graphics a) {

        for (int i = 0; i < 19; i++) { // se dibuja la division del plano
            a.setColor(new Color(0, 0, 0));
            a.drawLine(273, 50 + (25 * i), 277, 50 + (25 * i));
            a.drawLine(50 + (25 * i), 273, 50 + (25 * i), 277);
        }
        int j = -1;
        for (int i = -9; i <= 9; i++) { // dibujamos los numero del eje X y eje Y

            j++;

            String x = Integer.toString(i);

            a.drawString(x, 50 + (25 * j), 273);
        }
        int h = -1;
        for (int i = 9; i >= -9; i--) {
            String x = Integer.toString(i);
            h++;
            if (!"0".equals(x)) {
                a.drawString(x, 263, 50 + (25 * h));
            }

        }
    }

    public void paint(Graphics a) {
        ejeXyY(a);
        divisionPlano(a);
        int x;
        int menor = 10;
        int max = 0;
        for (int i = 0; i < 5; i++) {
            do {
                x = Integer.parseInt(JOptionPane.showInputDialog(null, "digite f(x) " + (i + 1)));
                //pedimos al usuario que dijite 5 valores de x y los guardamos en un arreglo
                x1[i] = x;
               
            } while ((x > 10) || (x < -10)); //verifico que el numero no sea mayor ni menor que 10, porque plano solo va hasta 9 y -9
             a.fillOval (275+(x * 25),275+(x *-25),2,2);//vamos dibujando los puntos que ingresa el usuario
             a.drawOval (275+(x * 25),275+(x *-25),2,2);
               
        }
       
        for (int i = 0; i < 5; i++) { // saco menor numero y el mayor del arreglo para hacer la recta
            // System.out.println(n);
            if (x1[i] < menor) {
                menor = x1[i];
                System.out.println("este es el menor " + menor);
            }
        }
        for (int i = 0; i < 5; i++) {
            // System.out.println(n);
            if (x1[i] > menor) {
                max = x1[i];
                System.out.println("este es el mayor " + max);
            }
        }
        a.setColor(new Color(0, 0, 0));
        a.drawLine(275 + (menor * 25), 275 + (menor * -25), 275 + (max * 25), 275 + (max * -25));// se dibuja la recta.

       
    }
}


Título: Re: Applet en java no termina ejecucion
Publicado por: Ismaw34 en 7 Noviembre 2013, 15:38 pm
Saludos,

En solucion de tu problema, he de advertirte que si vas a compilar el Applet para ejecutarlo en el Explorador de internet, a ninguno les gusta el JOptionPane o similares frames que se creen.

De todas maneras me he tomado la libertad de ponerle algo interesante

Código
  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import java.awt.event.KeyEvent;
  5. import java.awt.event.KeyListener;
  6.  
  7. import javax.swing.JOptionPane;
  8.  
  9. public class AppletGrafica extends Applet {
  10.  
  11.    int x1[] = new int[5];
  12.  
  13.    public void init() {
  14.     this.addKeyListener(new KeyListener() {
  15.  
  16. @Override
  17. public void keyTyped(KeyEvent arg0) {
  18. }
  19.  
  20. @Override
  21. public void keyReleased(KeyEvent arg0) {
  22. if (arg0.getKeyCode() == KeyEvent.VK_R) {
  23. insertaDatos();
  24. }
  25. }
  26.  
  27. @Override
  28. public void keyPressed(KeyEvent arg0) {
  29. }
  30. });
  31.    }
  32.  
  33.    public void start() {
  34.     insertaDatos();
  35.    }
  36.  
  37.    public void insertaDatos() {
  38.     int x;
  39.     for (int i = 0; i < 5; i++) {
  40.            x = Integer.parseInt(JOptionPane.showInputDialog(null, "digite f(x) " + (i + 1)));
  41.            //pedimos al usuario que dijite 5 valores de x y los guardamos en un arreglo
  42.            x1[i] = x;
  43.    }
  44.     repaint();
  45.    }
  46.  
  47.    public void ejeXyY(Graphics a) {
  48.        a.drawLine(50, 275, 500, 275);//eje x
  49.        a.drawLine(275, 50, 275, 500);//eje y
  50.    }
  51.  
  52.    public void divisionPlano(Graphics a) {
  53.  
  54.        for (int i = 0; i < 19; i++) { // se dibuja la division del plano
  55.            a.drawLine(273, 50 + (25 * i), 277, 50 + (25 * i));
  56.            a.drawLine(50 + (25 * i), 273, 50 + (25 * i), 277);
  57.        }
  58.        int j = -1;
  59.        for (int i = -9; i <= 9; i++) { // dibujamos los numero del eje X y eje Y
  60.  
  61.            j++;
  62.  
  63.            String x = Integer.toString(i);
  64.  
  65.            a.drawString(x, 50 + (25 * j), 273);
  66.        }
  67.        int h = -1;
  68.        for (int i = 9; i >= -9; i--) {
  69.            String x = Integer.toString(i);
  70.            h++;
  71.            if (!"0".equals(x)) {
  72.                a.drawString(x, 263, 50 + (25 * h));
  73.            }
  74.  
  75.        }
  76.    }
  77.  
  78.    public void paint(Graphics a) {
  79.     super.paint(a);
  80.     a.setColor(Color.BLACK);
  81.        ejeXyY(a);
  82.        divisionPlano(a);
  83.        int menor = 10;
  84.        int max = -10;
  85.        for (int i = 0; i < 5; i++) {
  86.         if (x1[i]< 10 && x1[i] > -10) {
  87.         a.fillOval (275+(x1[i] * 25),275+(x1[i] *-25),2,2);//vamos dibujando los puntos que ingresa el usuario
  88.            a.drawOval (275+(x1[i] * 25),275+(x1[i] *-25),2,2);}
  89.        }
  90.  
  91.        for (int i = 0; i < 5; i++) { // saco menor numero y el mayor del arreglo para hacer la recta
  92.            // System.out.println(n);
  93.            if (x1[i] < menor) {
  94.                menor = x1[i];
  95.                System.out.println("este es el menor " + menor);
  96.            }
  97.        }
  98.        for (int i = 0; i < 5; i++) {
  99.            // System.out.println(n);
  100.            if (x1[i] > max) {
  101.                max = x1[i];
  102.                System.out.println("este es el mayor " + max);
  103.            }
  104.        }
  105.        a.drawString("Re inserta datos con \"R\"", 10, 10);
  106.        a.drawLine(275 + (menor * 25), 275 + (menor * -25), 275 + (max * 25), 275 + (max * -25));// se dibuja la recta.
  107.        a.dispose();
  108.    }
  109. }

Cambios:

llamar a super.paint(g); para baciar el buffer
g.dispose(); llama para avisar que ya has terminado de usarlo
en el init() he puesto el manejador de "Reset"
en el start() llamamos al primer "Reset"
creado el metodo de reset, que inserta los datos dentro de x1
Cambiados varios codigos de colores que no te servian para nada

Espero haberte ayudado,

-Ismaw34