[AYUDA][NOVATO] Problema con Timer Task

Iniciado por Noxware, 4 Octubre 2014, 02:22 AM

0 Miembros y 1 Visitante están viendo este tema.

Noxware

hola, soy no osy programador Java pero me surgio un proyecto y tube q aprender un poco de Java... en fin... necesitaba q una tarea se ejecutara varias veces cada cierto tiempo y q se detubiera cuando llegara a un cierto numero de repeticiones.... para dentener el timer coloque en una funcion aparte lo siguiente:

Código (java) [Seleccionar]
public static void stop_it(){
if (max_altura == 504){
timer.cancel();
        timer.purge();
}


luego al tocar un boton necestio q realize la misma tarea pero el timer deja de funcionar...

aca les dejo el codigo son 200 lineas mas o menos muy muy desprolijas ya q no se programar en java de seguro hice un monton de cosas inecesarias pero espero q se entienda...

el codigo de boton y el timer estan entre la linea 73 y la 103
el codigo de la funcion para detenerlo esta entre la linea 184 y la 189

espero q se entienda.... (ball y scale son imagens,q se van a ir moviendo.... no le hagan caso...)

Código (java) [Seleccionar]
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;


public class MyClass {

static Timer timer = new Timer();

static short max_altura = 6;
static short max_ancho = 386;

static short min_altura = 504;
static short min_ancho = 386;

static float vi_val = 0f;
static float con_accel = 9.8f;
static float up = 500f;
static float cielito = 500f;

static JLabel uper = new JLabel("500.0 m");
static JLabel mid = new JLabel("250.0 m");
static JTextField altura = new JTextField("500");
static JTextField accel = new JTextField("9.8");
static JTextField vi = new JTextField("0");
static JLabel ball = new JLabel();
static JFrame frame = new JFrame("KuroNeko Fall Simulator 1.0");
static JLabel scale = new JLabel();
static JComboBox dir = new JComboBox();




static boolean pause_val = false;



public static void main(String args[]){

frame.setLayout(null);
frame.setSize(800, 565);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JLabel label1 = new JLabel("Altura maxima (m)");
label1.setBounds(10, 20, 110, 20);
//altura
altura.setBounds(140, 20, 200, 20);



JLabel label3 = new JLabel("Aceleracion (m/s²)");
label3.setBounds(10, 50, 110, 20);
//accel
accel.setBounds(140, 50, 200, 20);

JLabel label4 = new JLabel("Velocidad inicial (m/s)");
label4.setBounds(10, 80, 140, 20);
//vi
vi.setBounds(140, 80, 200, 20);

//scale
scale.setBounds(400, 20, 50, 500);
scale.setIcon(new ImageIcon("img/scale.png"));

//ball
ball.setBounds(max_ancho, max_altura, 30, 30);
ball.setIcon(new ImageIcon("img/ball.png"));

JButton start = new JButton("Iniciar");
start.setBounds(10, 230, 330, 20);
start.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {


TimerTask task = new TimerTask(){
public void run(){

stop_it();
Math.pow(1, 2);
Math.sqrt(100);
max_altura += 1;
ball.setBounds(max_ancho, max_altura, 30, 30);
frame.revalidate();
frame.repaint();
System.out.println("hoiwi :3");




}

};

timer.schedule(task, 0, 20);

}
});

JButton set_val = new JButton("Establecer estos valores");
set_val.setBounds(10, 200, 330, 20);
set_val.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {

up = Float.valueOf(altura.getText());
con_accel = Float.valueOf(accel.getText());
vi_val = Float.valueOf(vi.getText());



uper.setText(String.valueOf(up) + " m");
mid.setText(String.valueOf(up / 2) + " m");

max_altura = 6;
ball.setBounds(max_ancho, max_altura, 30, 30);
frame.revalidate();
frame.repaint();


}
});

JButton pause = new JButton("Pausar");
pause.setBounds(10, 260, 330, 20);
pause.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {


}
});


//uper
uper.setBounds(max_ancho+50, max_altura-10, 200, 50);
//mid
mid.setBounds(max_ancho+50, 245, 200, 50);
JLabel down = new JLabel(String.valueOf(0) + " m");
down.setBounds(min_ancho+50, min_altura-10, 200, 50);

//dir
JLabel label5 = new JLabel("Direccion de la pelota");
label5.setBounds(10, 110, 150, 20);
dir.setBounds(140, 110, 200, 20);
dir.addItem("Hacia abajo");
dir.addItem("Hacia arriba");
dir.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {


}
});


frame.add(label5);
frame.add(dir);
frame.add(uper);
frame.add(mid);
frame.add(down);
frame.add(altura);
frame.add(accel);
frame.add(start);
frame.add(set_val);
frame.add(scale);
frame.add(ball);
frame.add(pause);
frame.add(label4);
frame.add(vi);
frame.add(label1);
frame.add(label3);
frame.setVisible(true);
}

public static void stop_it(){
if (max_altura == 504){
timer.cancel();
        timer.purge();
}
}



}


el codigo de boton y el timer estan entre la linea 73 y la 103
"La mejor forma de conocer a una persona es viendo su código... o en una partida de ajedrez...

PD: Si no tengo faltas de ortografía es porque use el autocorrector."