Pessoal , bom dia. Estou com um problemao.
Tenho uma aplicação em JSF que necessita imprimir etiqueta nar Argox. No ambiente Windows funciona normalmente, pois antes da impressão eu solicito a seleção da impressora. Porém a janela que abre de seleção da impressora parece que é renderizada em SWING, mas no windows funciona OK. Agora quando subo para o ambiente Linux que tenho, ao chamar um simples JOptionPane de minha aplicação web (apenas para teste) é apresentada a seguinte mensagem:
Caused by: java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173)
at java.awt.Window.<init>(Window.java:476)
at java.awt.Frame.<init>(Frame.java:419)
at java.awt.Frame.<init>(Frame.java:384)
at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1754)
at javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1831)
at javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1692)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:864)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:668)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:639)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:610)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 40 more
Alguem já passou por isso? Será alguma configuração no meu Linux? Lembrando que não tenho interface gráfica instalada nele.
Valeu
[quote=renatoceadareanu]1. Esse sistema é todo em swing ?
Nao, é uma aplicação JSF mas no meu Bean preciso do auxilio de uma janela Swing para seleção de impressoras. (Particularidades da Argox)
[/quote]
Espera um pouco. Vai ter um rapaz só para clicar na janela de seleção de impressoras? Seria possível você acertar seu aplicativo para que tal janela jamais seja chamada?
Tente instalar esses 2 pacotes no seu linux:
- default-jre-headless
- default-jre
e veja se resolve.
Hum… acho que o buraco é mais embaixo.
Vossa Excelência é uma das pessoas que confunde os conceitos de aplicação que roda no servidor e o que está sendo apresentado no browser? (ou seja, faz aquela carinha de “Mas funcionava na minha máquina”) quando isso ocorre?
[quote=rof20004]Tente instalar esses 2 pacotes no seu linux:
- default-jre-headless
- default-jre
e veja se resolve.[/quote]
É isso mesmo. Falta uma jre na máquina dele.
sudo apt-get install openjdk-6-jre
entanglement, nao confundo as coisas não! Apenas coloquei um JOptionPane para ter um teste rápido. O printJob que estou setando vai partir de uma impressora selecionada pelo client, mas a janela de seleção de impressora que é utilizada no printJob é em SWING parece. E roda no windows pois ele tem interface gráfica, no meu servidor não.
entanglement,
Nao pode ser impressora default, ele pode ter mais que uma impressora, ele precisa selecionar a Argox para emitir as etiquetas.
Ainda não estou entendendo. O servidor está submetendo um job de impressão em uma impressora Argox que está conectada onde? No próprio servidor ou é uma impressora remota, conectada sei lá onde?
Se estiver conectada sei lá onde, é necessário ver como é que isso é feito no Linux.
Ela está conectado na maquina client, é uma aplicação cloud
Infelizmente (e quando digo “infelizmente” é infelizmente mesmo), o modo clássico de resolver tais problemas é o de fazer uma applet imprimir na impressora do client.
Eu digo “infelizmente” porque depois de todos esses malditos problemas de segurança, para você conseguir executar uma applet em um browser, você precisa de muita sorte e de controlar completamente o ambiente do cliente (incluindo a periodicidade de atualizações nas máquinas clientes).
Problemas conceituais mais ou menos, creio que seja falta de conhecimento do linux por minha parte, pois subi a mesma aplicação (JSF + Glassfish) em um cloud Windows e funcionou, imprimiu no client…
Instalou os pacotes ? tem tb o open-jdk6-headless, acredita irmaooooo!!!
Talvez eu não tenha entendido o que vc precisa… mas cara, esse JOptionPane você não está dando no servidor, né?
Se você der um JOptionPane na parte servidor, a mensagem vai aparecer (ou não, se vc não tiver Interface Gráfica no SO) somente no servidor, e não no cliente…
Tente deixar o seu windows como servidor e acesse pelo linux… o que acontece?
Oi Renato, tudo bem?
Então, recentemente passei por este problema, mas no meu caso não era com o JSF e sim com Servlet. No meu caso tinha que imprimir uma etiqueta de RFID. Bom vamos a uma paliativa solução. Antes gostaria de apontar o motivo do erro, apesar de muitos saberem acho que vale a pena ressaltar. Para ser + direto, quando você usa WIN (pura sorte) ocorre a execução da impressão por estar usando um sistema operacional visual, no caso do linux (servidor) ele não tem o X11 DISPLAY, resumindo, o swing não consegue subir por não ter suporte a telas.
Possível soluções:
Criar um applet.
Exemplo que fiz: http://www.raydacosta.com/printapplet/
Fintes do exemplo: http://www.raydacosta.com/printapplet/MyPrint2.zip
Obs.: A única coisa que você vai ter que fazer é chamar ou passar os paramentos que tem que ser impresso para o Applet…
Espero ter ajudado…
Outra saida é usar webstart… ai fica ninja…
Ola Renato…
Pelo que entendi, o seu problema é acessar a impressora direto do cliente e enviar os comandos EPL para impressão !!!
Se esse for o problema, creio que isso deve ajudar !!!
http://code.google.com/p/jzebra/
Só fazer a chamada do JavaScript no botão.