Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2010, 07:57
Avatar de farfamorA
farfamorA
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Sonrisa Problema al imprimir (en papel) varios txt

¡Buenos días! Este es mi primer mensaje en este foro (ya leí las Políticas de Foros del Web) y en primer lugar quería agradecerles porque muchísimos de los temas que he leído me han sido útiles. Soy un programador novato en Java y, bueno, al grano:

Contexto (Esta parte se puede obviar, pero he visto que hay usuarios que gustan leer el contexto del problema a resolver)
Estoy desarrollando un sencillo programa en Java (utilizo el IDE NetBeans 6.9.1) que genera archivos .TXT (esto funciona bien ;D) con datos leídos de una tabla .DBF (también los lee bien ;D). Explícitamente: el programa recibe dos parámetros String, los busca en determinada columna del .DBF y guarda (temporalmente) el número de fila en el que aparecen. Acto seguido, genera un .TXT para cada una de las filas entre ambos parámetros.
Por ejemplo: ingreso "ABC" y "XYZ" y el programa busca estos String en, digamos la columna 3, y obtiene que el String "ABC" y "XYZ" se encuentran en las filas 5 y 10 respectivamente. Entonces, el programa procede a usar la información de las filas 5, 6, 7, 8 , 9 y 10 del .DBF para crearle un .TXT para cada una de ellas. Como dije, hasta aquí, a pesar de complicaciones iniciales, he tenido relativo éxito.


Problema
Yo utilizo este código para imprimir (no en consola, sino en una impresora EPSON FX-890) un archivo .TXT (por cierto, funciona bien ;D)
Código PHP:
public class imprimir {
   public static 
void documento(String cadenaBuscadathrows FileNotFoundExceptionPrintException
   
{
java.awt.Desktop desktop java.awt.Desktop.getDesktop();
java.io.File fichero = new java.io.File(cadenaBuscada);
if (
desktop.isSupported(Desktop.Action.PRINT)){
            try {
                
desktop.print(fichero);
            } catch (
IOException ex) {
                
Logger.getLogger(Main.class.getName()).log(Level.SEVEREnullex);
            }
}else{
    
JOptionPane.showMessageDialog(null,"El sistema no permite imprimir usando la clase Desktop.\n"
            
"Actualiza tu versión de JVM""Error imprimiendo"JOptionPane.ERROR_MESSAGE);
}
   }

El código no es mío, lo encontré leyendo en un foro de internet, un experto lo dió como ejemplo para un usuario que había hecho una consulta.

El problema surge cuando mando a imprimir varios archivos .TXT en una misma ejecución. A veces, los imprime en el orden correcto en el que los mando, pero a veces no. Me explico: Yo tengo un String[] almacen (con los nombres de los archivos .TXT a imprimir) y básicamente hago lo siguiente:

Código PHP:
for (int=0;i<nombres.length();i++)
imprimir.documento(nombres[i]); 
No creo que esto sea una buena práctica. Probé también poner el bucle dentro del método documento, con resultados similares: me imprime a veces en orden, a veces en desorden.

No entiendo por qué, pues el vector String[] almacen se genera siempre ordenado (lo he comprobado, pues en consola muestro el String[] almacen y lo veo ordenado, y cuando los mando a imprimir, las impresiones salen en desorden).

Muchos se dirán, y si las hojas me salen en desorden ¡pues las ordeno! El problema es que yo trabajo con papel continuo. Y la impresora tiene que imprimir los archivos en estricto orden como están en el String[] almacen.

Ya no sé que pensar: Al parecer, el programa envía "muy rápido" los archivos a la cola de la impresora, la cual no reacciona bien y las recibe como puede. Cabe mencionar que cuando salen en desorden, no están completamente en desorden: o sea, si tenía que imprimir en el orden 1, 2, 3, 4 y 5, entonces es probable que salga 3, 2, 1, 4 y 5 o 5, 1, 2, 3 y 4 o algo parecido.

Probé usar el
Código PHP:
Thread.sleep(milisegundos
, para darle un respiro a la impresora entre cada envío, pero al estar este código en un bucle (el for), no funcionó bien (vamos, me imprimía una línea de cada .TXT, a veces sólo algunas letras, se volvía loca la impresora ;O). También probé poner el mismo código dentro del método documento, con resultados desalentadores.

Entonces, mi pregunta es:

¿Qué puedo hacer para lograr que la impresora reciba la cola de impresión en orden? Se me ocurre que será algo parecido al Thread.sleep(), pero que me funcione bien ;D. O quizás simplemente estoy utilizando mal el Thread.sleep() ;O.

Desde ya, les agradezco por su tiempo.

¡Un saludo desde Lima!