/*
Ejemplo simple del uso de Runnable.
*/
//package experimentos;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
*
* @author Rafael Angel Montero Fernández.
*/
public class RunnableMain {
public static void main(String m[])
{
FormRunnable frmHilos=new FormRunnable();
}//main
}//RunnableMain
abstract class MiRunnable implements Runnable
{
private int contador=0;
public abstract void ejecutando_hilos();
private Thread vThread=null;//new Thread(this);
public void inicio()
{
try
{
vThread=null;
vThread=new Thread(this);
vThread.start();
}//try
catch(Exception ex)
{
vThread.resume();
}//catch
}//inicio
public void parar()
{
vThread.stop();
//vThread=null;
try
{
this.wait();}catch(Exception ex){vThread=null;}
}//parar
@Override
public void run()
{
//while(true)
{
//System.out.println("Hola");
this.ejecutando_hilos();
}
}//run
/**
* @return retorna el valor guardado en la variable contador.
*/
public int getContador() {
return contador;
}
/**
* @param nuevo_contador parametro de entrada de numeros.
*/
public void setContador(int nuevo_contador) {
this.contador = nuevo_contador;
}
}//MiRunnable
///////////////////////////////////////////////////////////////////////////////
@SuppressWarnings("serial")
class FormRunnable extends JFrame implements ActionListener
{
private JMenu jmArchivo=new JMenu("Archivo"), jmVer=new JMenu("Ver"), jmAcciones=new JMenu("Acciones");
private JMenuItem jmiSalir=new JMenuItem("Salir"), jmiComenzar=new JMenuItem("Comnenzar"), jmiDetener=new JMenuItem("Detener"), jmiRealizar_otra_tarea=new JMenuItem("Realizar otra tarea");
private JLabel jlDatos=new JLabel("Datos de los hilos.");
private JTextArea jtaDatos=new JTextArea();
private JScrollPane jspDatos;//=new JScrollPane();
private JMenuBar jmbBarra=new JMenuBar();
private String mDatos[]={"Rafael", "UCr", "Usando hilos para hacer aplicasiones paralelas", "San Ramon", "Sharkyc12@gmail.com", "Soy un triunfador", "Soy excitoso"};
public FormRunnable()
{
super("Formulario Runnable");
this.setSize(325, 370);
this.setLayout(null);
this.setResizable(false);
this.setDefaultCloseOperation(3);
jlDatos.setBounds(5, 0, 300,25);
this.getContentPane().add(jlDatos);
jtaDatos.setBounds(5, 30, 300,300);
jspDatos=new JScrollPane(jtaDatos);
jspDatos.setBounds(5, 30, 300, 300);
this.getContentPane().add(jspDatos);
jmbBarra.add(jmArchivo);
jmArchivo.add(jmiSalir);
jmbBarra.add(jmVer);
jmbBarra.add(jmAcciones);
jmAcciones.add(jmiComenzar);
jmAcciones.add(jmiDetener);
jmAcciones.add(jmiRealizar_otra_tarea);
this.jmiRealizar_otra_tarea.addActionListener(this);
this.jmiComenzar.addActionListener(this);
this.jmiDetener.addActionListener(this);
this.jmiSalir.addActionListener(this);
this.setJMenuBar(jmbBarra);
this.show();
}//Constructor
@Override
public void actionPerformed(ActionEvent evt)
{
click_salir(evt);
this.click_comenzar(evt);
this.click_detener(evt);
this.click_realizar_otra_tarea(evt);
}//public void actionPerformed(ActionEvent evt)
public void click_realizar_otra_tarea(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(this.jmiRealizar_otra_tarea.getText())==true)
{
try
{
String msj=JOptionPane.showInputDialog(this, "Escriba cualquier informacion aqui.","Cualquier informacion");
JOptionPane.showMessageDialog(this, msj);
}catch(Exception ex){JOptionPane.showMessageDialog(null, "No escribió nada en el input.");
}//Catch
}
}//click_realizar_otra_tarea
public void click_detener(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(jmiDetener.getText())==true)
{
this.detener();
}
}//click_detener
public void click_comenzar(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(jmiComenzar.getText())==true)
{
this.comenzar();
}
}//click_comenzar
public void click_salir(ActionEvent evt)
{
if(evt.getActionCommand().equalsIgnoreCase(jmiSalir.getText())==true)
{
System.exit(0);
}
}//click_salir
HiloRunnable hilo=new HiloRunnable();
public void comenzar()
{
try
{
hilo.inicio();//Cuando se ejecuta por primera vez.
}
catch(Exception ex)
{
//hilo;//Ha sido detenido o suspendido y entonces se resume o se continua con el hilo.
}
}//comenzar
public void detener()
{
try
{
hilo.parar();//Mejor se suspende. Es mejor que stop o sea mejor que detenerlo.
}//try
catch(Exception ex)
{
JOptionPane.showMessageDialog(this, ex.getMessage());
}//catch
}//detener
public class HiloRunnable extends MiRunnable
{
private Aleatorios rnd=new Aleatorios(mDatos.length-1);
public HiloRunnable()
{
}//Constructor
@Override
public void ejecutando_hilos() {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
try
{
while(true)
{
rnd.setAleatorios();
//this.setContador(getContador()+1);
jtaDatos.setText(jtaDatos.getText() + mDatos[rnd.getAleatorios()]+ "\n");
//if(getContador()>=mDatos.length-1)
{
//this.parar();
}//if
}//while
}
catch(Exception ex)
{
System.out.println("Error");
}
}//hilos_de_ejecusion
}//Mi_hilo
}//HiloRunnable
class Aleatorios
{
private int numero_aleatorio=0, vMax=0;
public Aleatorios(int max)
{
vMax=max;
//this.inicio();
}//Aleatorios
public void setAleatorios() {
//for(int i=0;i<12;i++)
//while(true)
{
numero_aleatorio=(int) (Math.random()*vMax)+1;//Se generan numeros aleatorios constantemente
System.out.println(this.numero_aleatorio);
}//while
}//hilos_de_ejecusion
public int getAleatorios()
{
return numero_aleatorio;
}// public int generar_aleatorio(int max)
}//Aleatorios
Comentarios sobre la versión: 1.0 corregido (1)
según tengo que crear 5 cajas de manera gráfica, con "n" clientes que aparezcan y se vayan formando uno tras otro en cada una de las cajas, pero las cajas también tienen un botón que sea que la caja se cierre y también se pueda abrir de nuevo.
las cajas están abiertas para que aparezcan los clientes en distintos tiempos y se formen uno tras otro en cada fila, pero si en ese mismo momento se desactiva algunas de las cajas, que los clientes se queden esperando en esa misma caja que se desactivo, hasta que se vuelva a activar para seguir atendiéndolos.
la verdad no se como hacer eso de manera gráfica, dicen que son con hilos, pero no le encuentro forma de meterle los gráficos para que se vean todas esas acciones.
alguien me podría ayudar con eso?, sobre eso de los hilos que se tengan que utilizar aquí?, según me dijeron que se utiliza el executorservice para eso, pero no se si esta bien o sea otra cosa?