Serveur X & Ja va sous Linux

Serveur X & Ja va sous Linux - Java - Programmation

Marsh Posté le 17-11-2004 à 09:36:17    

Quelqu'un sait-il comment accéder au serveur X avec  une Servlet, par l'intermédiaire  
d'un Frame, dans le but d'afficher une image dynamiquement !
Lorsque, dans la servlet, j'appelle Frame.addNotify(), le serveur tomcat me renvoie une erreur !!!
 
Voici le code :
 
import java.io.*;
import java.awt.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
import Acme.JPM.Encoders.GifEncoder;
 
public class HelloWorldGraphics extends HttpServlet {
 
  public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    ServletOutputStream out = res.getOutputStream();  // binary output!
 
    Frame frame = null;
    Graphics g = null;
 
    try {
      // Create an unshown frame
      frame = new Frame();
      frame.addNotify();
 
      // Get a graphics region, using the Frame
      Image image = frame.createImage(400, 60);
      g = image.getGraphics();
 
      // Draw "Hello World!" to the off-screen graphics context
      g.setFont(new Font("Serif", Font.ITALIC, 48));
      g.drawString("Hello World!", 10, 50);
 
      // Encode the off-screen image into a GIF and send it to the client
      res.setContentType("image/gif" );
      GifEncoder encoder = new GifEncoder(image, out);
      encoder.encode();
    }
    finally {
      // Clean up resources
      if (g != null) g.dispose();
      if (frame != null) frame.removeNotify();
    }
  }
}
 
Et voici l'erreur renvoyée :
 
java.awt.HeadlessException
 at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
 at java.awt.Window.(Window.java:310)
 at java.awt.Frame.(Frame.java:419)
 at java.awt.Frame.(Frame.java:384)
 at HelloWorldGraphics.doGet(HelloWorldGraphics.java:18)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:450)
 at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
 at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
 at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
 at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
 at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
 at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
 at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
 at java.lang.Thread.run(Thread.java:595
 
J'ai essayé avec xhost +localhost, mais rien n'y fait !!
Merci d'avance de vos réponses

Reply

Marsh Posté le 17-11-2004 à 09:36:17   

Reply

Marsh Posté le 17-11-2004 à 10:57:30    

[:recherche]

Reply

Marsh Posté le 19-11-2004 à 11:02:28    

Utiliser AWT dans une Servlet, j'aurais jamais osé !!!

Reply

Marsh Posté le 19-11-2004 à 11:54:40    

pourtant ça marche fort bien. comment tu crois qu'on genere des charts et autres graphiques sur le web?
 
bon.
pour la 25eme fois, je vais donner la solution :o
il faut demarrer le serveur avec les options:

JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Dsun.java2d.fontpath=$JAVA_HOME/jre/lib/fonts/"


 
(et encore, l'option des fonts, chuis meme pas sur que ça soit encore utile)


Message édité par the real moins moins le 19-11-2004 à 11:55:26
Reply

Marsh Posté le 19-11-2004 à 15:42:55    

Merci, je vais essayer de suite, et vous donne la réponse aussitôt que possible !!!

Reply

Marsh Posté le 21-11-2004 à 16:06:53    

Oui, et bien en fait, chez moi (sous Debian Sarge), il  faut mettre l'option java.awt.headless à false, et en plus il faut taper: "xhost local:", pour autoriser les connection en local, pour l'utilisateur de Tomcat, puis il faut redémarrer le serveur tomcat, pour qu'il puisse prenfre en compte les 'modifs'.
Par ailleurs, suite à cette manipulation, j'ai constaté bcp de plantage du serveur X lors de ma deconnexion, donc ja suis passé à tomcat 5.5.4, et là, cela semble fonctionner mieux, car je n'ai plus de plantage du serveur X à ma deconnexion !!!
Donc, pour ceux que ça intéresse .... Je les engage à ne plus utiliser Tomcat4, mais plutôt Tomcat5.
Voilou


Message édité par mic74 le 21-11-2004 à 16:08:39
Reply

Marsh Posté le 21-11-2004 à 17:27:26    

étrange ton histoire, à priori y'a aucune raison de mettre headless à false...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-11-2004 à 21:04:16    

Ben oui, moi aussi, je ne comprends pas trop pourquoi.
Si tu as des infos, qui pourraient me permettre une configuration "normale", je suis preneur !!!
merci d'avance.

Reply

Marsh Posté le 22-11-2004 à 22:11:49    

ben faut voir comment tu demarre ton tomcat, c'est pê betement que tu as mal setté l'option

Reply

Marsh Posté le 23-11-2004 à 21:11:24    

En fait, le tomcat que je démarre, est celui fourni par jakarta: j'ai juste suivi les instructions dans le paquet !
En fait, avec ce Tomcat (5.5.4), l'option java.awt.headless=true, est absente de la conf. de démarrage, et ça marche. J' ai essayé en la mettant, et les servlets me signalent une exception: java.awt.headless Exception ... , donc je l'ai retirée ... Ah oui, l'option "-Djava.awt.headless=true" n'est pas à false, mais carrément absente de la ligne de démarrage, si tu veux je faire un copier-coller de cette ligne, cela t'éclairera peut-être ?
Merci d'avance de ton aide !

Reply

Marsh Posté le 23-11-2004 à 21:11:24   

Reply

Marsh Posté le 23-11-2004 à 21:18:34    

gni...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed