Hola Xerelo, estaba justo editando el tema cuando me contestaste xq creo que de esta manera se ve mejor lo que me pasa.
En el ventana principal dispongo de un boton que al pulsarlo inicia un bucle cuyo resultado lo ha de mostrar por consola, a la vez, se debe crear un hilo donde se ejecutara otro bucle y cuyo resultado se muestre en una nueva ventana.
Ambos hilos por separado funcionan perfectamente, pero al juntarlos algo pasa que no corre bien la aplicacion.
Veamos el codigo:
En este caso, una ventana y un boton, al pulsarlo se inicia un bucle y se muestra por consola:
Código Javascript
:
Ver originalimport java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.WindowConstants;
public class Main2 {
/** La ventana */
private JFrame v;
/** El botón */
private JButton b;
public static void main(String[] args) {
new Main2();
}
/**
* Crea la ventana, inicializa todo y la visualiza
*/
public Main2() {
// Nueva ventana. Se el pone un FlowLayout para que el botón y campo
// de texto quede alineados.
v = new JFrame("Version Beta Transmision");
GridBagLayout vLayout = new GridBagLayout();
v.getContentPane().setLayout(vLayout);
vLayout.rowWeights = new double[] { 0.1, 0.1, 0.1, 0.1, 0.1 };
vLayout.rowHeights = new int[] { 7, 7, 7, 7, 7 };
vLayout.columnWeights = new double[] { 0.1, 0.0, 0.1, 0.1 };
vLayout.columnWidths = new int[] { 7, 129, 7, 7 };
// Se crea el botón y se mete en la ventana
b = new JButton("Enviar");
v.getContentPane().add(
b,
new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
// Se le dice al botón qué tiene que hacer cuando lo pulsemos.
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i = 0;
while (true) {
System.out.println("Valor: " + i);
i++;
}
}
});
// Se le dice a la ventana que termine el programa cuando se la cierre
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Se le da un tamaño automático a la ventana para que quepa todo su
// contenido.
v.pack();
v.setSize(764, 365);
// Se hace visible la ventana
v.setVisible(true);
}
}
Ahora, al pulsar el boton, se crea un nuevo hilo que muestra un bucle en una nueva ventana:
Código Javascript
:
Ver originalimport java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.WindowConstants;
public class Main2 {
/** La ventana */
private JFrame v;
/** El botón */
private JButton b;
public static void main(String[] args) {
new Main2();
}
/**
* Crea la ventana, inicializa todo y la visualiza
*/
public Main2() {
// Nueva ventana. Se el pone un FlowLayout para que el botón y campo
// de texto quede alineados.
v = new JFrame("Version Beta Transmision");
GridBagLayout vLayout = new GridBagLayout();
v.getContentPane().setLayout(vLayout);
vLayout.rowWeights = new double[] { 0.1, 0.1, 0.1, 0.1, 0.1 };
vLayout.rowHeights = new int[] { 7, 7, 7, 7, 7 };
vLayout.columnWeights = new double[] { 0.1, 0.0, 0.1, 0.1 };
vLayout.columnWidths = new int[] { 7, 129, 7, 7 };
// Se crea el botón y se mete en la ventana
b = new JButton("Enviar");
v.getContentPane().add(
b,
new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
// Se le dice al botón qué tiene que hacer cuando lo pulsemos.
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
v.setVisible(false);
Hilo t = new Hilo();
t.start();
}
});
// Se le dice a la ventana que termine el programa cuando se la cierre
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Se le da un tamaño automático a la ventana para que quepa todo su
// contenido.
v.pack();
v.setSize(764, 365);
// Se hace visible la ventana
v.setVisible(true);
}
}
El codigo del hilo es este:
Código Javascript
:
Ver originalimport java.awt.BorderLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
public class Hilo extends Thread{
public void run() {
JFrame parentFrame = new JFrame();
parentFrame.setSize(500, 150);
JLabel jl = new JLabel();
jl.setText("Contando : 0");
parentFrame.add(BorderLayout.CENTER, jl);
parentFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
parentFrame.setVisible(true);
int i =0;
while(true){
jl.setText("Contando : " + i);
i++;
}
}
}
Y ahora lo que no funcina, las dos cosas a la vez :(
Código Javascript
:
Ver originalimport java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.WindowConstants;
public class Main2 {
/** La ventana */
private JFrame v;
/** El botón */
private JButton b;
public static void main(String[] args) {
new Main2();
}
/**
* Crea la ventana, inicializa todo y la visualiza
*/
public Main2() {
// Nueva ventana. Se el pone un FlowLayout para que el botón y campo
// de texto quede alineados.
v = new JFrame("Version Beta Transmision");
GridBagLayout vLayout = new GridBagLayout();
v.getContentPane().setLayout(vLayout);
vLayout.rowWeights = new double[] { 0.1, 0.1, 0.1, 0.1, 0.1 };
vLayout.rowHeights = new int[] { 7, 7, 7, 7, 7 };
vLayout.columnWeights = new double[] { 0.1, 0.0, 0.1, 0.1 };
vLayout.columnWidths = new int[] { 7, 129, 7, 7 };
// Se crea el botón y se mete en la ventana
b = new JButton("Enviar");
v.getContentPane().add(
b,
new GridBagConstraints(3, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(0, 0, 0, 0), 0, 0));
// Se le dice al botón qué tiene que hacer cuando lo pulsemos.
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
v.setVisible(false);
Hilo t = new Hilo();
t.start();
int i = 0;
while (true) {
System.out.println("Valor: " + i);
i++;
}
}
});
// Se le dice a la ventana que termine el programa cuando se la cierre
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// Se le da un tamaño automático a la ventana para que quepa todo su
// contenido.
v.pack();
v.setSize(764, 365);
// Se hace visible la ventana
v.setVisible(true);
}
}