Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Noxware en 4 Octubre 2014, 02:22 am



Título: [AYUDA][NOVATO] Problema con Timer Task
Publicado por: Noxware en 4 Octubre 2014, 02:22 am
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
  1. public static void stop_it(){
  2. if (max_altura == 504){
  3. timer.cancel();
  4.        timer.purge();
  5. }

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
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.util.Timer;
  6. import java.util.TimerTask;
  7.  
  8.  
  9. public class MyClass {
  10.  
  11. static Timer timer = new Timer();
  12.  
  13. static short max_altura = 6;
  14. static short max_ancho = 386;
  15.  
  16. static short min_altura = 504;
  17. static short min_ancho = 386;
  18.  
  19. static float vi_val = 0f;
  20. static float con_accel = 9.8f;
  21. static float up = 500f;
  22. static float cielito = 500f;
  23.  
  24. static JLabel uper = new JLabel("500.0 m");
  25. static JLabel mid = new JLabel("250.0 m");
  26. static JTextField altura = new JTextField("500");
  27. static JTextField accel = new JTextField("9.8");
  28. static JTextField vi = new JTextField("0");
  29. static JLabel ball = new JLabel();
  30. static JFrame frame = new JFrame("KuroNeko Fall Simulator 1.0");
  31. static JLabel scale = new JLabel();
  32. static JComboBox dir = new JComboBox();
  33.  
  34.  
  35.  
  36.  
  37. static boolean pause_val = false;
  38.  
  39.  
  40.  
  41. public static void main(String args[]){
  42.  
  43. frame.setLayout(null);
  44. frame.setSize(800, 565);
  45. frame.setResizable(false);
  46. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  47.  
  48. JLabel label1 = new JLabel("Altura maxima (m)");
  49. label1.setBounds(10, 20, 110, 20);
  50. //altura
  51. altura.setBounds(140, 20, 200, 20);
  52.  
  53.  
  54.  
  55. JLabel label3 = new JLabel("Aceleracion (m/s˛)");
  56. label3.setBounds(10, 50, 110, 20);
  57. //accel
  58. accel.setBounds(140, 50, 200, 20);
  59.  
  60. JLabel label4 = new JLabel("Velocidad inicial (m/s)");
  61. label4.setBounds(10, 80, 140, 20);
  62. //vi
  63. vi.setBounds(140, 80, 200, 20);
  64.  
  65. //scale
  66. scale.setBounds(400, 20, 50, 500);
  67. scale.setIcon(new ImageIcon("img/scale.png"));
  68.  
  69. //ball
  70. ball.setBounds(max_ancho, max_altura, 30, 30);
  71. ball.setIcon(new ImageIcon("img/ball.png"));
  72.  
  73. JButton start = new JButton("Iniciar");
  74. start.setBounds(10, 230, 330, 20);
  75. start.addActionListener(new ActionListener() {
  76.  
  77. @Override
  78. public void actionPerformed(ActionEvent arg0) {
  79.  
  80.  
  81. TimerTask task = new TimerTask(){
  82. public void run(){
  83.  
  84. stop_it();
  85. Math.pow(1, 2);
  86. Math.sqrt(100);
  87. max_altura += 1;
  88. ball.setBounds(max_ancho, max_altura, 30, 30);
  89. frame.revalidate();
  90. frame.repaint();
  91. System.out.println("hoiwi :3");
  92.  
  93.  
  94.  
  95.  
  96. }
  97.  
  98. };
  99.  
  100. timer.schedule(task, 0, 20);
  101.  
  102. }
  103. });
  104.  
  105. JButton set_val = new JButton("Establecer estos valores");
  106. set_val.setBounds(10, 200, 330, 20);
  107. set_val.addActionListener(new ActionListener() {
  108.  
  109. @Override
  110. public void actionPerformed(ActionEvent arg0) {
  111.  
  112. up = Float.valueOf(altura.getText());
  113. con_accel = Float.valueOf(accel.getText());
  114. vi_val = Float.valueOf(vi.getText());
  115.  
  116.  
  117.  
  118. uper.setText(String.valueOf(up) + " m");
  119. mid.setText(String.valueOf(up / 2) + " m");
  120.  
  121. max_altura = 6;
  122. ball.setBounds(max_ancho, max_altura, 30, 30);
  123. frame.revalidate();
  124. frame.repaint();
  125.  
  126.  
  127. }
  128. });
  129.  
  130. JButton pause = new JButton("Pausar");
  131. pause.setBounds(10, 260, 330, 20);
  132. pause.addActionListener(new ActionListener() {
  133.  
  134. @Override
  135. public void actionPerformed(ActionEvent arg0) {
  136.  
  137.  
  138. }
  139. });
  140.  
  141.  
  142. //uper
  143. uper.setBounds(max_ancho+50, max_altura-10, 200, 50);
  144. //mid
  145. mid.setBounds(max_ancho+50, 245, 200, 50);
  146. JLabel down = new JLabel(String.valueOf(0) + " m");
  147. down.setBounds(min_ancho+50, min_altura-10, 200, 50);
  148.  
  149. //dir
  150. JLabel label5 = new JLabel("Direccion de la pelota");
  151. label5.setBounds(10, 110, 150, 20);
  152. dir.setBounds(140, 110, 200, 20);
  153. dir.addItem("Hacia abajo");
  154. dir.addItem("Hacia arriba");
  155. dir.addActionListener(new ActionListener() {
  156.  
  157. @Override
  158. public void actionPerformed(ActionEvent e) {
  159.  
  160.  
  161. }
  162. });
  163.  
  164.  
  165. frame.add(label5);
  166. frame.add(dir);
  167. frame.add(uper);
  168. frame.add(mid);
  169. frame.add(down);
  170. frame.add(altura);
  171. frame.add(accel);
  172. frame.add(start);
  173. frame.add(set_val);
  174. frame.add(scale);
  175. frame.add(ball);
  176. frame.add(pause);
  177. frame.add(label4);
  178. frame.add(vi);
  179. frame.add(label1);
  180. frame.add(label3);
  181. frame.setVisible(true);
  182. }
  183.  
  184. public static void stop_it(){
  185. if (max_altura == 504){
  186. timer.cancel();
  187.        timer.purge();
  188. }
  189. }
  190.  
  191.  
  192.  
  193. }
  194.  

el codigo de boton y el timer estan entre la linea 73 y la 103