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 *
****************************
--
Fabrizio Marini
Company Partner
K-Tech S.r.l.
Via Tibullo, 13
00193 - Rome (RM) - Italy
http://www.k-tech.it
http://www.javaportal.it
Phone: +39 (0) 6 68301467
E-mail: f.ma...@k-tech.it / fabry....@mclink.it
"marco" <ocra...@libero.it> wrote in message
news:MeaE7.21215$7A4.1...@news.infostrada.it...
"Fabrizio Marini" <fabry....@mclink.it> ha scritto nel messaggio
news:9rrmqg$18js$1...@newsreader1.mclink.it...
--
Fabrizio Marini
Company Partner
K-Tech S.r.l.
Via Tibullo, 13
00193 - Rome (RM) - Italy
http://www.k-tech.it
http://www.javaportal.it
Phone: +39 (0) 6 68301467
E-mail: f.ma...@k-tech.it / fabry....@mclink.it
"marco" <ocra...@libero.it> wrote in message
news:rBtE7.27708$7A4.1...@news.infostrada.it...
"Fabrizio Marini" <fabry....@mclink.it> ha scritto nel messaggio
news:9ru1p9$1hng$1...@newsreader1.mclink.it...