Java - Problemas con Swing

   
Vista:
Imágen de perfil de Enrique

Problemas con Swing

Publicado por Enrique (2 intervenciones) el 22/10/2015 13:34:37
Hola buenas, estoy desarrollando una aplicación en Swing que ejectua ficheros .bat. El caso es que debido a que la ejecución de los ficheros conlleva un tiempo determinado y en ocasiones algo elevado, lo que quiero es abrir una ventana emergente que haga algo similar a una imagen de cargando. La ventana se abre, pero muestra nada. Yo creo que el problema está cuando se ejecuta un fichero .bat, que anula todo lo demás y no deja que se muestre de manera correcta el contenido de la ventana emergente, porque si ejecuto la ventana sin ejectuar el .bat, esta se abre y hace la animación del GIF de manera correcta.

Le ha pasado esto a alguien alguna vez?

Gracias.
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

Problemas con Swing

Publicado por Tom (914 intervenciones) el 22/10/2015 14:29:46
Probablemente tu problema consiste en que tratas de hacer las dos cosas en el mismo hilo de ejecución.
Echa un ojo aquí, a ver si alguno de los ejemplos te sirve de orientación:

https://docs.oracle.com/javase/tutorial/uiswing/components/progress.html
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

Problemas con Swing

Publicado por Tom (914 intervenciones) el 22/10/2015 16:09:00
Esto funciona, sin ventana emergente.

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
public class NewJFrame extends javax.swing.JFrame implements ActionListener {
 
	public NewJFrame() {
		initComponents();
	}
 
    private void initComponents() {
 
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();
        jProgressBar1 = new javax.swing.JProgressBar();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 
        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);
 
        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
 
        jButton1.setText("Start Subprocess");
        jButton1.addActionListener(this);
        getContentPane().add(jButton1, java.awt.BorderLayout.PAGE_START);
        getContentPane().add(jProgressBar1, java.awt.BorderLayout.PAGE_END);
 
        pack();
    }
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        if (evt.getSource() == jButton1) {
            NewJFrame.this.jButton1ActionPerformed(evt);
        }
    }
 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
		BatchTask task = new BatchTask(new ProcessBuilder("/bin/ls", "-R", "/opt"), jTextArea1, jProgressBar1);
		task.execute();
    }
	public static void main(String args[]) {
 
		java.awt.EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				new NewJFrame().setVisible(true);
			}
		});
	}
	/* */
	class BatchTask extends SwingWorker<Boolean, String> {
		ProcessBuilder pb;
		JTextArea ta;
		JProgressBar prg;
		/* */
		public BatchTask(ProcessBuilder pb, JTextArea ta, JProgressBar progress) {
			this.pb = pb;
			this.ta = ta;
			this.prg = progress;
		}
		@Override
		protected Boolean doInBackground() throws Exception {
			prg.setIndeterminate(true);
			Process p = pb.start();
			BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String line;
			while((line = is.readLine()) != null) {
				publish(line);
			}
			return true;
		}
		/* */
		@Override
		protected void process(List<String> lines) {
			for(String line : lines) {
				ta.append(line + "\n");
			}
		}
		/* */
		@Override
		protected void done() {
			prg.setIndeterminate(false);
		}
	}
 
    private javax.swing.JButton jButton1;
    private javax.swing.JProgressBar jProgressBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
}
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