Newsgroup: it.comp.java
Titolo: Xvfb si incarta usando Swing ma funziona con le AWT ?

Sto' cercando di debuggare una applicazione Java che usa Xvfb per
fare delle manipolazioni su delle immagini. Il guaio e' che sto'
coso funziona benissimo se uso AWT, ma si incarta se cerco di usare
Swing.
Ho cercato su google e sul sito di XFree ma non ho trovato alcuna
traccia della cosa.
Qualcuno ha gia' visto qualche cosa di simile ?
Davide

dav...@yahoo.com
 wrote:

Io ho usato Xvfb per un paio di servlet che restituiscono gif, ma un po'
di tempo fa... mi sa che aevo usato solo le AWT... se vuoi puoi postare
il codice (debitamente tagliato) ed io posso provare a dare una rapida
occhiata a casa... se non è una montagna di roba!
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

 occhiata a casa... se non una montagna di roba!
Il codice di prova e' semplicissimo:
import java.awt.*;
import javax.swing.*;
// public class AWTTest extends JFrame {
public class AWTTest extends Frame {
public AWTTest() {
 
        super("Prova");
        System.out.println("JFrame created\n");
        show();
        System.out.println("JFrame showed\n");
}
public static void main(String args[]) {
        System.out.println("About to create the JFrame\n");
        AWTTest t = new AWTTest();
}
}
Se de-commenti la prima riga e commenti la seconda (cioe' usi
JFrame invece di Frame) si inchioda, altrimenti funziona...
Davide
~                                                                               

 ha scritto nel messaggio
news:a2lsol$12cngv$2...@ID-18487.news.dfncis.de...


 magari decidere di provarle.
Purtroppo non sono io che ho scritto l'applicazione "vera", e prima di
mettermi a smontarla tutta per rifarla preferisco vedere che cavolo c'e'
che non funziona con Xvfb.
Davide


 che non funziona con Xvfb.
Ti capisco benissimo...

 Il codice di prova e' semplicissimo:
Davide, ho provato il tuo codice a casa ieri sera; mi da lo stesso
comportamento, sia che io usi AWT sia che io usi Swing. Non dà alcuna
eccezione.


 eccezione.
Cio' e' molto interessante, mi puoi dare dettagli riguardo la tua
installazione/configurazione di Xvfb ? (versione, piattaforma...)
Davide

 installazione/configurazione di Xvfb ? (versione, piattaforma...)
Con precisione te li posso postare domattina, devo guardarci (lo uso sulla
mia macchina a casa e ora sono in ufficio). Comunque è una RedHat 7.2 (ma
anche sotto la 7.1 funzionava), il Xvbf è quello della distro; l'unica
cosa 'particolare' se non ricordo male è che lo lancio sul display 1
(quindi prima di lanciare la tua applicazione avevo fatto export
DISPLAY=:1.0) all'avvio proprio per averlo sempre attivo a prescindere da
X.


 DISPLAY=:1.0) 
ma non dovrebbe essere DISPLAY=0:1 ?
Davide

 ma non dovrebbe essere DISPLAY=0:1 ?
Normalmente il display è [localhost]:0.0 (e non 0:0), ossia per la precisione
display 0 schermo 0. Se tu avessi ad esempio una scheda dual head (o un'altra
scheda video) potresti aggiungere al display 0 la seconda uscita video, e questa
sarebbe lo schermo 1, ossia :0.1. La mia macchina ha una caratteristica
interessante - una megapotente scheda video con bumpmapping, bumpshading,
coprocessore grafico, e caffettiera; per la precisione dispongo di una S3Virge
che non mi permette di andare a 16 milioni di colori. Siccome a volte lancio X
(per usare JBuilder), e questo normalmente parte sul display 0, preferisco
lanciare Xvfb sul display 1, completamente separato dal server X 'per l'utente',
così posso mandarlo a 1024x768x24 bit di profondità, lasciandomi dietro le
limitazioni della S3. Purtroppo le conoscenze in mio possesso non mi aiutano a
capire se lo schermo :0.0 e lo schermo :0.1 possano andare a differenti
risoluzioni e profondità di colore, e quindi ho risolto così, ma funziona
egregiamente e questo mi basta. ;)
Ti allego lo script che ho in /etc/rc.d/init.d; è un po' bacato (all'accensione
della macchina non se la dà che Xvfb non è attivo) ma funziona lo stesso. Se hai
il tempo di darci un'occhiata e metterlo a posto tanto meglio... ;)
#!/bin/sh
# Il seguente script serve a lanciare o fermare Xvfb
# nel processo di avvio o di arresto del server
# processname: xvfb
PIDFILE=/var/xvfb
SCREEN=1
RESOLUTION=1280x1024x24
XVFB=/usr/X11R6/bin/Xvfb
RETVAL=0
function getPID() {
 ps x | grep ^[^.*grep.*] | grep $XVFB >> /var/xvfb
 PID=`ps x | grep ^[^.*grep.*] | grep $XVFB | cut -c0-5`
 if [ "$PID" = "" ]; then
     echo ""
 else
     echo "$PID"
 fi
}
rm -f /var/xvfb >/dev/null 2>&1
echo >/var/xvfb Chiamato xvfb "$1"
# See how we were called.
case "$1" in
  start)
 echo "Start" >>/var/xvfb
 PID=`getPID`
 if [ "$PID" = "" ]; then
     echo -n "Starting Xvfb: "
     $XVFB :$SCREEN -screen 0 $RESOLUTION &
     RETVAL=$?
     if [ $RETVAL -eq 0 ]; then
  echo "started"
     else
  echo "problems encountered"
     fi
     echo
 else
     echo "$XVFB already running with pid $PID"
     echo "$XVFB already running with pid $PID" >>/var/xvfb
     ps x >>/var/xvfb
     RETVAL=10
 fi
 ;;
  stop)
 echo "Stop" >>/var/xvfb
 echo -n "Shutting down Xvfb: "
 PID=`getPID`
 if [ ! "$PID" = "" ]; then
     kill -15 $PID
     RETVAL=$?
     if [ $RETVAL -eq 0 ]; then
  echo "killed"
     else
  echo "problems encountered"
     fi
 else
     echo "$XVFB not running"
     RETVAL=1
 fi
 echo
 ;;
  status)
 echo "Status" >>/var/xvfb
 PID=`getPID`
 if [ "$PID" = "" ]; then
     echo "xvfb not running"
 else
     echo "Xvfb running with pid $PID"
 fi
 RETVAL=0
 ;;
  restart)
 echo "Restart" >>/var/xvfb
 $0 stop
 $0 start
 ;;
  *)
 echo "Unknown: $1" >>/var/xvfb
 echo "Usage: $0 {start|stop|status|restart}"
 exit 1
esac
echo "All done - return value is $RETVAL" >>/var/xvfb
exit $RETVAL
