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 cadenaBuscada) throws FileNotFoundException, PrintException
{
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.SEVERE, null, ex);
}
}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 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 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)
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!