(Avanzado) Threads y listeners
Publicado por Reinhold Main (3 intervenciones) el 12/07/2003 00:38:29
Resulta que tengo un applet con un jTextPane y es cargado con el metodo ".setPage(URL)"., para luego ser impreso y dibujado en el Graphics del método "print() del PrinterJob".
El problema que tengo es que:
Cuando dibujo el jTextPane con el setPage(URL), este todavia no ha terminado de bajar la pagina para mostrarla, pero a la vez el siguiente proseso sigue su curso imprimiendo una página en blanco (ya que todavia no ha bajado de la url el jTextPane).
Opte por hacer esto:
//******************************
URL $url = new URL("www.google.cl");
jTextPane1.setPage($url);
// Creo un ciclo infinito
while ($status == 0){
repaint();
Thread.sleep(1000);
}
// Y esto es un listener para el jTextPane (PropertyChangeListener)
//*******************************
jTextPane1.addPropertyChangeListener(
new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("page")) {
//Cuando evt... vale "page" es por que termino de bajar la pagina
PrinterJob printJob = PrinterJob.getPrinterJob ();
printJob.setPrintable (this);
repaint();
if (printJob.printDialog()) {
try {
printJob.print();
} catch (Exception PrintException) {
PrintException.printStackTrace();
}
} // if
$status = 1; // <= esto es para que salga del ciclo infinito
} //if
}
});
// FIN *****************************
MI PROBLEMA :
Cuando creo el ciclo infinito para que el Thread principal se detenga hasta que el Thread del listener termine,.. el applet me queda congelado y blanco, y cuando voy a pintar el graphics del metodo print, lo pinta todo blanco.
PREGUNTA:
conocen otra solucion?, probe poniendo repaint() en todas partes, y nada, existira otra manera de parar el tread principal y activarlo cuando el listener termine?.
Gracias.
Atte. Reinhold Main ([email protected])
El problema que tengo es que:
Cuando dibujo el jTextPane con el setPage(URL), este todavia no ha terminado de bajar la pagina para mostrarla, pero a la vez el siguiente proseso sigue su curso imprimiendo una página en blanco (ya que todavia no ha bajado de la url el jTextPane).
Opte por hacer esto:
//******************************
URL $url = new URL("www.google.cl");
jTextPane1.setPage($url);
// Creo un ciclo infinito
while ($status == 0){
repaint();
Thread.sleep(1000);
}
// Y esto es un listener para el jTextPane (PropertyChangeListener)
//*******************************
jTextPane1.addPropertyChangeListener(
new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("page")) {
//Cuando evt... vale "page" es por que termino de bajar la pagina
PrinterJob printJob = PrinterJob.getPrinterJob ();
printJob.setPrintable (this);
repaint();
if (printJob.printDialog()) {
try {
printJob.print();
} catch (Exception PrintException) {
PrintException.printStackTrace();
}
} // if
$status = 1; // <= esto es para que salga del ciclo infinito
} //if
}
});
// FIN *****************************
MI PROBLEMA :
Cuando creo el ciclo infinito para que el Thread principal se detenga hasta que el Thread del listener termine,.. el applet me queda congelado y blanco, y cuando voy a pintar el graphics del metodo print, lo pinta todo blanco.
PREGUNTA:
conocen otra solucion?, probe poniendo repaint() en todas partes, y nada, existira otra manera de parar el tread principal y activarlo cuando el listener termine?.
Gracias.
Atte. Reinhold Main ([email protected])
Valora esta pregunta


0