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:
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...)
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 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 JFrame frame
= new JFrame("KuroNeko Fall Simulator 1.0");
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);
label1.setBounds(10, 20, 110, 20);
//altura
altura.setBounds(140, 20, 200, 20);
label3.setBounds(10, 50, 110, 20);
//accel
accel.setBounds(140, 50, 200, 20);
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);
start.setBounds(10, 230, 330, 20);
@Override
public void run(){
stop_it();
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);
}
});
set_val.setBounds(10, 200, 330, 20);
@Override
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();
}
});
pause.setBounds(10, 260, 330, 20);
@Override
}
});
//uper
uper.setBounds(max_ancho+50, max_altura-10, 200, 50);
//mid
mid.setBounds(max_ancho+50, 245, 200, 50);
down.setBounds(min_ancho+50, min_altura-10, 200, 50);
//dir
label5.setBounds(10, 110, 150, 20);
dir.setBounds(140, 110, 200, 20);
dir.addItem("Hacia abajo");
dir.addItem("Hacia arriba");
@Override
}
});
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