[DICA]Could not Connect to X Server (java.awt.headless)

Bom,

Eu tenho um servlet que desenha mapas. Quando rodado usando o Tomcat no Windows, funciona perfeitamente. Quando usado no Linux, ele dava a seguinte mensagem: Could not Connect to X Server.

O servidor X está instalado na minha máquina, então descobri que por algum motivo o usuário tomcat estava sem permissão para usa-lo.

Pesquisando na internet, descobri o comando xhost. O mesmo permite que vc dê acesso a algum usuário usar o X Server ou até mesmo desabilitar a segurança dele.

Mesmo com o problema resolvido, continuei com a pulga atrás da orelha: O que aconteceria com meu servlet quando usasse um servidor sem o X Server.

Foi aí que descobri a propriedade headless. Alguns componentes gráficos do Java precisam de um Display. Outros só usam o display quando a propriedade java.awt.headless está setada para false (que é o padrão). No meu caso, só uso componentes que não exigem display (no meu caso, java.awt.Graphics e java.awt.Graphics2d)

A solução é executar o Tomcat com a opção -Djava.awt.headless=true ou colocar um servlet na inicialização do servidor, executando o código System.setProperty("java.awt.headless","true')
O importante é esse código rodar antes de qualquer componente que use o Display ser executado.

Abs!