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.
Voce esta rodando essa aplicacao em modo servidor no linux ?
Voce instalou o JDK no seu linux ?
Abraços.
R
Renato_Ceadareanu
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)
Voce esta rodando essa aplicacao em modo servidor no linux ?
Sim, esta no Glassfish
Voce instalou o JDK no seu linux ?
openJdk
E
entanglement
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)
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?
R
rof20004
Tente instalar esses 2 pacotes no seu linux:
default-jre-headless
default-jre
e veja se resolve.
R
Renato_Ceadareanu
ok vou tentar
E
entanglement
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?
J
juliocbq
rof20004:
Tente instalar esses 2 pacotes no seu linux:
default-jre-headless
default-jre
e veja se resolve.
É isso mesmo. Falta uma jre na máquina dele.
sudo apt-get install openjdk-6-jre
R
Renato_Ceadareanu
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.
R
Renato_Ceadareanu
entanglement,
Nao pode ser impressora default, ele pode ter mais que uma impressora, ele precisa selecionar a Argox para emitir as etiquetas.
E
entanglement
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.
R
Renato_Ceadareanu
Ela está conectado na maquina client, é uma aplicação cloud
E
entanglement
Hum… realmente você está com problemas conceituais mesmo. Se é uma aplicação cloud, aí é que o servidor não vai conseguir submeter um job de impressão na sua máquina client mesmo
E
entanglement
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).
R
Renato_Ceadareanu
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…
R
rof20004
Instalou os pacotes ? tem tb o open-jdk6-headless, acredita irmaooooo!!!
E
erico_kl
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?
R
raydacosta
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.
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…
C
camolesi
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 !!!