Passando por um problema bem chato e sem saber direito o que fazer.
Fazendo uma aplicação web com captcha mas infelizmente nao funciona no servidor…
o log de erro é este abaixo:
SEVERE: Servlet.service() for servlet Captcha threw exception
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:64)
at nl.captcha.text.imp.DefaultWordRenderer.renderWord(Unknown Source)
at nl.captcha.servlet.DefaultCaptchaIml.createImage(Unknown Source)
at nl.captcha.servlet.CaptchaServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
vi algo de inicializar com um tal de " -Djava.awt.headless=true " mas nao sei onde inicializar isto e nem se é isso o problema e se for o problema por favor alguem pode me explicar o que isto faz???
-Djava.awt.headless=true é um parâmetro que deve ser posto na inicialização da JVM ( ou seja, do /usr/bin/java ) do servidor, quando ele não tem acesso a uma tela gráfica (o que é comum se você rodar o servidor em uma máquina Unix ou Linux como um “daemon”).
Procure como é que você altera as opções de inicialização do Tomcat (deve ser algo no arquivo catalina.sh ou coisa parecida.)
Um “Windows Service” é um “daemon” no Unix, ou seja, um programa que roda em “background” fazendo algo (como servir bancos de dados, páginas web etc.)
Sei lá se é “incorporado” ou se você precisa exorcizá-lo … Talvez você precise de algum exorcista famoso para remover todos os “daemons” que povoam o Windows.
lendo um pouco mais sobre o assunto descobri que do mesmo modo que o windows tem processos o linux tem daemoms…hehe…foi isso que li no forum do under-linux… mas outros dizem que eh soh a carinha bonitinha de um processo, por exemplo o firefox fika sendo executado quando vc minimiza ele mas o daemom faz a perfumaria dele que nao eh necessario fazer quando minimizado…
Um programa com interface gráfica minimizado não é um daemon. Isso porque se você se deslogar, o firefox que você deixou minimizado será assassinado.
Um daemon, no Unix, é algo que sobrevive a um login/logoff etc. porque não roda sob uma sessão de usuário.
O tal parâmetro “headless” indica ao Java (versão 1.4 ou superior) que ele não precisa usar uma biblioteca X para criar gráficos. Portanto, você tem de acertar as opções de execução do seu Tomcat.
Basicamente é assim: existe um local na configuração do seu Tomcat (olhe a documentação, depende da versão!) que indica onde você pode usar esse parâmetro -Djava.awt.headless=true. É no mesmo lugar em que se altera a quantidade de memória máxima para o Tomcat (-Xmx256m se quiser que o Tomcat use 256m, por exemplo). Você tem de editar o tal arquivo, e então reiniciar o Tomcat. Aí você pode experimentar para ver se a biblioteca passa a funcionar.
Acho que o seu Java não é tão velho que tal parâmetro não funcione; se você estivesse usando o Websphere 5.0 aí você estaria usando o Java 1.3 (argh) que não tem o tal parâmetro disponível, e aí você estaria em apuros.
resolvi criando uma aplicacao com outra lib de captcha…que nao necessita de inicializacao da lib X11 de interface…
na verdade achu q ela ateh utilizava essa lib (X11) mas ouvi falar que sao apenas 3 linhas de codigo q nao sao utilizadas que fazem este erro (Handless…) acontecer…aih era soh comenta-las que tudo fika tranquilo!!!