Java: impresión del resultado del programa en una impresora física

Soy un programador relativamente nuevo, así que esta puede ser una pregunta muy simple de responder, pero me ha dejado un poco perplejo ...

Estoy intentando imprimir la salida final de mi GUI de Java en una impresora. Ahora, en mi GUI, lo tengo para que cuando presione imprimir, aparezca una lista emergente con la lista de impresoras disponibles, y en función de la que seleccione, debería imprimir en esa impresora.

Sin embargo, no lo es. Obtuve la mayor parte de mi código buscando en Internet soluciones para este problema y encontré un código prometedor. Sin embargo, se imprimió desde un archivo. Entonces, todo lo que simplemente hago en mi método es escribir mi salida en un archivo primero para que pueda usar la misma metodología.

Un par de cosas antes del método:

No hay errores ni excepciones lanzadas.

El archivo que intento crear siempre existe y con el texto correcto.

La impresora en la que estoy imprimiendo ESTÁ recibiendo el trabajo de impresión, incluso cree que lo ha completado.

Si tuviera que adivinar, pensaría que tal vez estoy escribiendo el resultado en el archivo de manera que la impresora no lo hará excepto pero no me lo dice. De todos modos, hay bastante en este código que realmente no entiendo bien, así que avíseme qué puede encontrar.

Aquí está mi código:

private void printToPrinter()
    {

        File output = new File("PrintFile.txt");
        output.setWritable(true);
        //Will become the user-selected printer.
        Object selection = null;
        try 
        {
            BufferedWriter out = new BufferedWriter(new FileWriter(output));
            out.write(calculationTextArea.getText() + "\n" + specificTextArea.getText());
            out.close();

        }
        catch (java.io.IOException e)
        {
            System.out.println("Unable to write Output to disk, error occured in saveToFile() Method.");
        }
        FileInputStream textStream = null;
        try 
        {
            textStream = new FileInputStream("PrintFile.txt");
        }
        catch (java.io.FileNotFoundException e)
        {
            System.out.println("Error trying to find the print file created in the printToPrinter() method");
        }

        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc mydoc = new SimpleDoc(textStream, flavor, null);

        //Look up available printers.
        PrintService[] printers = PrintServiceLookup.lookupPrintServices(flavor, null);

        if (printers.length == 0)
        {
            // No printers found. Inform user.
            jOptionPane2.showMessageDialog(this, "No printers could be found on your system!", "Error!", JOptionPane.ERROR_MESSAGE);
        }
        else
        {
            selection = jOptionPane2.showInputDialog(this, "Please select the desired printer:", "Print", 
                                                        JOptionPane.INFORMATION_MESSAGE, null, printers,
                                                        PrintServiceLookup.lookupDefaultPrintService()); 
            if (selection instanceof PrintService)
            {
                PrintService chosenPrinter = (PrintService) selection;
                DocPrintJob printJob = chosenPrinter.createPrintJob();
                try 
                {
                    printJob.print(mydoc, null);
                }
                catch (javax.print.PrintException e) 
                {
                    jOptionPane2.showMessageDialog(this, "Unknown error occured while attempting to print.", "Error!", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta