Programa trava quando não há impressora instalada

4 respostas
arielss

Bom dia (eu de novo, ja to me sentindo um inutil kkk).

Meu programa manda imprimir uma String. Só que quando rodo o programa em computadores que não tem impressora instalada na porta LPT1 o sistema trava. Lógicamente que o sistema só vai rodar onde tem impressora, mas queria fazer com que ele não travasse e eu conseguisse tratar isso.

public static void imprimeLPT1(String str) {
        try {
          
            //-----------
            FileOutputStream fs = new FileOutputStream("LPT1:");
            str = cleanString(str);
            PrintStream ps = new PrintStream(fs);
            
            ps.println(str);
            ps.println();
            fs.close();  
            ps.close();
            
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Erro encontrado ao imprimir comanda." + ex.getMessage());
        } catch(Exception e){
            JOptionPane.showMessageDialog(null, "Exceção! "+ e.getMessage());
        }
        
    }

4 Respostas

Marlon_Meneses

isso acontece pq o sistema está esperando a resposta da impressora
faça uma thread para disparar a impressao

arielss

Marlon Meneses:
isso acontece pq o sistema está esperando a resposta da impressora
faça uma thread para disparar a impressao

Certo, implementei através da Thread.
Funcionou.

Só estou com dúvida pois quando fechei o programa, o processo javaw.exe continou em execução. Antes de eu implementar a thread o processo era finalizado.
Isso é normal?

sergiotaborda

arielss:
Marlon Meneses:
isso acontece pq o sistema está esperando a resposta da impressora
faça uma thread para disparar a impressao

Certo, implementei através da Thread.
Funcionou.

funcionou mas não está certo. Vc está deixando a thread travada ( por isso que o programa não fecha)

O que vc tem que fazer é descobrir se existe a impressora e se ela existe ai vc envia os dados
para decobrir as impressores use a Java Print API

arielss
sergiotaborda:
arielss:
Marlon Meneses:
isso acontece pq o sistema está esperando a resposta da impressora faça uma thread para disparar a impressao

Certo, implementei através da Thread.
Funcionou.

funcionou mas não está certo. Vc está deixando a thread travada ( por isso que o programa não fecha)

O que vc tem que fazer é descobrir se existe a impressora e se ela existe ai vc envia os dados
para decobrir as impressores use a Java Print API

Obrigado, vou realizar os testes e volto aqui para mostrar o resultado e/ou mais dúvidas, rs.

Edit:

public static boolean detectaImpressoras() {
        try {
            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);            
            for (PrintService p : ps) {
                System.out.println("Impressora encontrada: " + p.getName());
                if (p.getName().contains("4200")) {
                    System.out.println("Impressora Selecionada: " + p.getName());
                    return true;
                }
            }
            return false;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

Agora está validando e funcionando. Tem mais alguma consideração sobre esse código?

Criado 30 de janeiro de 2013
Ultima resposta 31 de jan. de 2013
Respostas 4
Participantes 3