Java - Problema a la hora de actualizar un JTextArea

 
Vista:
sin imagen de perfil

Problema a la hora de actualizar un JTextArea

Publicado por Kebo (15 intervenciones) el 11/04/2016 12:54:55
Buenos Dias.
Mi problema es que estoy desarrollando una ventana que ejecuta varias clases dependiendo de unos checkbox. Cuando ejecute la primera tarea (es decir, lo que diga en el primer checkbox) quiero que me diga que esta ejecutando esa tarea en el TextArea y cuanda acaba quiero que me diga que ha finalizado, pero hasta el momento en el que acaba de ejecutarse esa tarea el textarea no se actualiza. He leido algo por ahi sobre que puede ser problema del EDT (Event Dispatch Thread). Pero no entiendo muy bien... Aqui les dejo un trozo del código y a ver si pueden ayudarme.
Muchas gracias.

El código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public class TareasMantenimiento extends JFrame implements ActionListener {
 
	private JCheckBox checkLogs, checkscripts;
	private JTextArea consolatext;
	private static String[] argumentos;
	private boolean terminado = false;
	private JButton botejecutar, botcancelar;
 
	// Configuracion de GUI
 
	public TareasMantenimiento() {
 
		super("Tareas de Mantenimiento");
		// Panel principal
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(4, 1));
 
		checkLogs = new JCheckBox("Descarga logs");
		checkscripts = new JCheckBox("Scripts SQL Diarios");
		consolatext = new JTextArea();
 
		JPanel panelbotones = new JPanel();
		panelbotones.setLayout(new FlowLayout());
		botejecutar = new JButton("Ejecutar");
		botcancelar = new JButton("Cancelar");
		panelbotones.add(botejecutar);
		panelbotones.add(botcancelar);
 
		// registrar componentes de escucha para los objetos JButton
 
		botejecutar.addActionListener(this);
		botcancelar.addActionListener(this);
 
		panel.add(checkLogs);
		panel.add(checkscripts);
		panel.add(consolatext);
		panel.add(panelbotones);
 
		add(panel);
 
		InicializarJframe();
	}
 
	// Control de eventos de los JButton dependiendo de los check que esten
	// seleccionados
 
	@Override
	public void actionPerformed(ActionEvent e) {
 
		if (e.getSource().equals(botejecutar)) {
 
			// Si al pulsar el boton aceptar, este check esta marcado ejecuta la
			// clase DescargaLogs
 
			if (checkLogs.isSelected()) {
 
				consolatext.append("--- Descarga logs --> En ejecución ---");
				DescargaLogs deslog = new DescargaLogs(argumentos);
				terminado = deslog.ejecutar();
				if (terminado) {
					consolatext.append("--- Descarga logs --> Terminado ---");
				}
 
			}
 
			if (checkscripts.isSelected()) {
				System.out.println("Scripts está seleccionado");
			}
 
		} else
			System.exit(0);
 
	}
 
 
	private void InicializarJframe() {
		setSize(600, 400);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
 
	}
 
	public static void main(String[] args) {
		argumentos = args;
		TareasMantenimiento tm = new TareasMantenimiento();
 
	}
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problema a la hora de actualizar un JTextArea

Publicado por Kebo (15 intervenciones) el 13/04/2016 12:54:38
Ya resolví el problema, tube que crear un objeto de tipo Runnable y que el método run() englobara todo lo que hay dentro del if que corrobora que se ha pulsado el boton ejecutar.

Runnable ejecutar=new Runnable(){
public void run(){
if (checkLogs.isSelected()) {
.......................... //Aqui va toda la fiesta
}

y luego hacer un start() de ese thread claro.
Gracias igualmente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar