Newsgroup: it.comp.java
Titolo: problema con servlet che genera immagine

Ciao a tutti.
Ho realizzato una semplice servlet che mi genera un grafico a barre. Sul mio
computer funziona perfettamente (uso tomcat 3.1 e jdk 1.3), mentre sul
server che ospita il mio sito non c'è verso di farla funzionare. Mi viene
risposto il seguente messaggio di errore:
Error: 500
Location: /
fantacalc.it/servlet/Grafico
Internal Servlet Error:
java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment
 at java.lang.Class.forName1(Native Method)
 at java.lang.Class.forName(Class.java:134)
 at
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment
.java:64)
 at java.awt.Window.(Window.java:190)
 at java.awt.Frame.(Frame.java:318)
 at java.awt.Frame.(Frame.java:265)
 at Grafico.doGet(Grafico.java:48)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
 .... etc ....
Da cosa può dipendere?
Il problema credo che sorga nella riga 48, in cui viene creata una istanza
della classe Frame, che verrà poi usata per generare l'oggetto image. C'è un
modo alternativo per creare l'oggetto image senza usare la classe Frame? Sul
libro Java Servlet Programming viene accennato che in java 1.2 è possibile
creare un oggetto image usando BufferedImage, ma non dice come si fa.
Ecco il codice completo della servlet. La servlet fa uso della classe
GifEncoder e altre prelevate da 
www.acme.com
import java.io.*;
import java.awt.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Grafico extends HttpServlet {
        private final int larg=260; // larghezza immagine
        private final int spaz=20; // spazio tra una barra e l'altra
        private final int ds=90; // spazio a sx del grafico
        private final int dd=40; // spazio a dx del grafico
        private final int spes=8; // spessore barre
        private final Color colore=Color.red; // colore barre
        private final int fontSize=11;
        private final int car=10; // num max caratteri etichetta
        public void doGet(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException {
                Frame frame=null;
                Graphics g=null;
                // lettura parametri
                String num=req.getParameter("num");
                int i,n;
                try {
                        n=Integer.parseInt(num);
                } catch (Exception e) {return;}
                String[] nomi=new String[n];
                for (i=0;i<n;i++) {
                        nomi[i]=req.getParameter("n"+i);
                        if (nomi[i]==null) return;
                        if (nomi[i].length()>10)
nomi[i]=nomi[i].substring(0,car);
                }
                String[] v=new String[n];
                int[] valori=new int[n];
                double d;
                for (i=0;i<n;i++) {
                        v[i]=req.getParameter("v"+i);
                        if (v[i]==null) return;
                        try {
                                d=Double.parseDouble(v[i]);
                        } catch (Exception e) {return;}
                        valori[i]=(int) d;
                }
                // calcolo valore massimo barra
                int max=valori[0];
                for (i=0;i<n;i++) if (valori[i]>max) max=valori[i];
                try {
                        // generazione oggetto Graphics
                        frame=new Frame(); // qui c'è l'inghippo!
                        frame.addNotify();
                        Image image=frame.createImage(larg,spaz*n);
                        g=image.getGraphics();
                        // disegno del grafico
                        int lm=larg-ds-dd;
                        int l;
                        g.setFont(new Font("Serif",Font.BOLD,fontSize));
                        for (i=0;i<n;i++) {
                                l=((max==0) ? 0 : ((int) (((double)
lm)*(((double) valori[i])/((double) max)))));
                                g.setColor(Color.black);
                                g.drawString(nomi[i],2,10+(i*spaz));
                                g.setColor(Color.darkGray);
                                g.fillRect(ds+2,4+(spaz*i),l,spes);
                                g.setColor(colore);
                                g.fillRect(ds,2+(spaz*i),l,spes);
                                g.setColor(Color.black);
                                g.drawString(v[i],ds+l+5,10+(spaz*i));
                        }
                        // invio immagine
                        res.setContentType("image/gif");
                        ServletOutputStream out=res.getOutputStream();
                        GifEncoder encoder=new GifEncoder(image,out);
                        encoder.encode();
                }
                finally {
                        if (g!=null) g.dispose();
                        if (frame!=null) frame.removeNotify();
                }
        }
}
Il mio sito:
****************************
*        
www.fantacalcissimo.it
         *
****************************

 wrote in message
news:MeaE7.21215$7A4.1...@news.infostrada.it...


 ha scritto nel messaggio
news:9rrmqg$18js$1...@newsreader1.mclink.it...


 wrote in message
news:rBtE7.27708$7A4.1...@news.infostrada.it...


 ha scritto nel messaggio
news:9ru1p9$1hng$1...@newsreader1.mclink.it...
