Muchas gracias por el ejemplo.
Lo modifiqué un poco para que se ajustara a lo que necesito hacer, pero tengo solo un par de inconvenientes:
1. Necesito que no se inicie automaticamente, sino que se inicie en forma individual. Le agruegué dos botones para esto, pero no supe como hacerlo para hecharlos a andar individualmente.
2. Como puedo hacer para que los numeros del jtexfield1 se vayan desplegando en distintos colores?
(osea, el primero verde, el segundo azul y asi sucesivamente)
3. Como puedo darle la ubicacion y posicion en el formulario a los jtextfield y a los botones? Intenté darle ancho y alto al formulario, a los campo de texto y a los botones en el initComponents con la propiedad setBounds pero no se me reflejaban los cambios al compilar.
Este es el codigo:
Código:
package org;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class JApp extends JFrame {
private JTextField jTextField1, jTextField2;
private Threads Thread1, Thread2;
int aleatorio = 0;
public JApp() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new java.awt.FlowLayout());
jTextField1 = new javax.swing.JTextField("1000");
jTextField2 = new javax.swing.JTextField("1000");
getContentPane().add(jTextField1);
getContentPane().add(jTextField2);
jTextField1.setEditable(false);
jTextField2.setEditable(false);
JButton button = new JButton("Pausa 1");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Thread1.isPaused()) {
Thread1.resume();
} else {
Thread1.pause();
}
}
});
getContentPane().add(button);
JButton button2 = new JButton("Pausa 2");
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Thread2.isPaused2()) {
Thread2.resume();
} else {
Thread2.pause();
}
}
});
getContentPane().add(button2);
JButton button3 = new JButton("Iniciar 1");
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//realizar pregunta para saber si hilo1 esta corriendo, si no está corriendo, darle start
}
});
getContentPane().add(button3);
JButton button4 = new JButton("Iniciar 2");
button4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//realizar pregunta para saber si hilo2 esta corriendo, si no está corriendo, darle start
}
});
getContentPane().add(button4);
JButton button5 = new JButton("Parar 1");
button5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Thread1.stop();
}
});
getContentPane().add(button5);
JButton button6 = new JButton("Parar 2");
button6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Thread2.stop();
}
});
getContentPane().add(button6);
pack();
Thread1 = new Threads(this);
Thread2 = new Threads(this);
new Thread(Thread1).start();
new Thread(Thread2).start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
jTextField1.setText(String.valueOf(Thread1.get()));
jTextField2.setText(String.valueOf(Thread2.get()));
}
@Override
public void dispose() {
Thread1.stop();
Thread2.stop();
super.dispose();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new JApp().setVisible(true);
}
});
}
private class Threads implements Runnable {
private AtomicBoolean running = new AtomicBoolean(true);
private AtomicInteger value = new AtomicInteger(0);
private AtomicBoolean pause = new AtomicBoolean(false);
private JFrame frame;
public Threads(JFrame frame) {
this.frame = frame;
}
@Override
public void run() {
try {
while (running.get()) {
if (pause.get()) {
synchronized(this) {
wait();
}
}
aleatorio = (int) (Math.random ()* 10000);
value.set(aleatorio);
frame.repaint();
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
System.err.println(ex);
}
}
public void start() {
new Thread(Thread1).start();
}
public void stop() {
running.set(false);
if (isPaused()) resume();
}
public void pause() {
pause.set(true);
}
public boolean isPaused() {
return pause.get();
}
public void resume() {
pause.set(false);
synchronized(this) {
notify();
}
}
public Integer get() {
return value.get();
}
///////////////////////////////////////////////////////////
public void pause2() {
pause.set(true);
}
public boolean isPaused2() {
return pause.get();
}
public void stop2() {
running.set(false);
if (isPaused2()) resume2();
}
public void resume2() {
pause.set(false);
synchronized(this) {
notify();
}
}
}
}