Newsgroup: it.comp.java
Titolo: Grafica in Java & Servers [Lunghetto ma non troppo]

Ciao a tutti,
avrei una questione da porre...
Sviluppando sviluppando mi sono trovato di fronte alla necessità di
utilizzare classi grafiche (Swing e AWT) per applicazioni Java che girano su
piattaforme varie sulle quali non sempre è presente un server grafico attivo
(Linux in modalità testo e AS400).
Ho scoperto con una certa sorpresa che le mie applicazioni oppure le mie
servlet si piantano nel momento in cui utilizzano una classe grafica.
Nel caso di Linux (che conosco un pò meglio dell'AS) le servlet che girano
in JRun 2.1, piuttosto che in Tomcat (fino alla 3.3) generano un'eccezione
che fa riferimento alla non presenza della variabile DISPLAY settata.
Purtoppo anche facendo un export DISPLAY=0.0 nello script di lancio non se
ne cava fuori niente, sintomo, secondo me, che più che la variabile settata,
a Java è proprio necessario un server grafico attivo, infatti fornendo alla
variabile DISPLAY un server grafico (anche remoto), il tutto funziona senza
problemi.
E già qui ce ne sarebbe abbastanza per scocciarmi, anche se si può avanzare
la spiegazione che le Swing e le AWT utilizzino "chiamate di sistema
grafiche", ma putroppo c'è dell'altro, infatti per altri motivi mi trovo a
dover maneggiare dei file immagini (JPEG, GIF, PNG, etc.) che vanno inseriti
in un file PDF generato da una mia applicazione, e per fare ciò mi sono
spinto fino a trasformare tali files in byte[], dopo aver provato con la
classi derivate da Image e da File ma anche in questo caso il risultato è
che il file prodotto su AS risulta senza l'immagine che dovrebbe essere
inclusa, idem su Linux in modalità testo, mentre in Linux con server grafico
attivo il file esce correttamente con l'immagine al suo interno.
Spero che qualcuno mi dica che non so qualcosa, piuttosto che mi dia
ragione.
Ancora ciao a tutti,
Oliviero.

servlet si piantano nel momento in cui utilizzano una classe grafica.
Nota che sono cose con cui non mi sono mai scontrato: te le riporto
come me le ricordo.
La JVM (almeno quelle Sun fino alla 1.3) richiede esplicitamente
l'interfaccia grafica, anche solo installata. Non so se vale sempre o
solo se usi componenti visuali (anche senza... visualizzarli).
In passato si era parlato di provvedere nel JDK 1.4 (Merlin): le
chiamavano headless Java API (prova a cercare headless su 
java.sun.com
e anche su 
www.javaworld.com
).
Magari prova a verificare anche le altre JVM (IBM e altri).
Non so dirti di più.
HTH
-- 
Ciao
	Fabrizio C.

 ragione.
Sotto linux fai man Xvfb (X virtual frame buffer, istanzia un server X
che funziona 'n memoria' invece che sullo schermo. Non ho mai provato a
usarlo ma a breve anche io proverò tale soluzione.
Ciao,
	Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

 usarlo ma a breve anche io proverò tale soluzione.
Ho, con un tocco di classe tutto mio (?), aggirato il problema cambiando la
libreria di terzi che mi creava il problema.
Qualora possa tornare utile, in questi giorni mi sono interessato al
problema e nelle mie peregrinazioni sul Web ho trovato qualcosa, che devo
ancora analizzare a fondo, ma che sembra poter forse mettere una pezza a
questa mancanza di Java (< 1.4).
Ho trovato grazie a 
jars.com
 una libreria chiamata PJA (
http://www.eteks.com/pja/en/
 ) che, a quanto il mio inglese scricchiolante
mi permette di capire, da la possibilità di attingere a feature grafiche
Java senza che queste debbano appoggiarsi su risorse grafiche di sistema
come X11, etc.
Qualcuno ne sa qualcosa?
Mantiene ciò che promette?
Ha delle controindicazioni?
Saluti,
Oliviero.