Ich hab schon bei google gesehen, dass das gar nicht so einfach ist und muß
jetzt noch mal zu meinem Verständnis doch die Frage stellen.
Ich hab auf den Server Bilddateien liegen, die möchte ich ins Servlet laden,
daraus ein neues Bild machen und wieder als GIF ausgeben. GIF Encoder usw.
alles kein Problem. Jetzt ist da die Geschichte mit dem Peer und dem
grafischen Context. Ich hatte jetzt gelesen, das sich das mit BufferedImage
umgehen läßt.
Egal welche Methode ich wähle, ich bekomme immer eine
NoClassDefFoundException bei einer nativen Methode. Muß jetzt ein X-Server
(ist linux) laufen auf dem Webserver oder fehlen mir class-Dateien. Es hat
auf jeden fall was mit der Grafik zu tun, denn wenn ich die entsprechenden
Zeilen rausnehme, bekomme ich diese Ausnahme nicht. Wäre toll wenn einer
einen Tipp hätte oder auch eine Alternative hätte. Kann doch nicht so schwer
sein, die Bildinformation von einigen GIF's zusammen in ein neues zu packen.
Gruß
Michael
Michael Thelen wrote:
> Egal welche Methode ich wähle, ich bekomme immer eine
> NoClassDefFoundException bei einer nativen Methode. Muß jetzt ein X-Server
> (ist linux) laufen auf dem Webserver oder fehlen mir class-Dateien.
Oder xvfb.
Viele Gruesse,
Patrick
> Ich hab schon bei google gesehen, dass das gar nicht so einfach ist und muß
> jetzt noch mal zu meinem Verständnis doch die Frage stellen.
> Ich hab auf den Server Bilddateien liegen, die möchte ich ins Servlet laden,
> daraus ein neues Bild machen und wieder als GIF ausgeben. GIF Encoder usw.
> alles kein Problem. Jetzt ist da die Geschichte mit dem Peer und dem
> grafischen Context. Ich hatte jetzt gelesen, das sich das mit BufferedImage
> umgehen läßt.
>
> Egal welche Methode ich wähle, ich bekomme immer eine
> NoClassDefFoundException bei einer nativen Methode.
es ist ein NoClassDefFoundError, also eine ziemlich harte Angelegenheit
(letzteres interessiert mich, da ich mich auch im Zusammenhang mit
Servlets mit einem NCDFE abquäle).
> Muß jetzt ein X-Server
> (ist linux) laufen auf dem Webserver oder fehlen mir class-Dateien.
Gute Frage.
Es wäre nun gut zu wissen, welche Servlet-Engine Du benutzt. Evtl.
JServ? Die Klassen sollten jedoch abhängig vom verwendeten JRE vorhanden
sein und nicht abhängig von der Existens eines X-Servers.
Dass dir ohne X das AWT um die Ohren fliegt, ist klar, aber dann sollte
eigentlich nur eine Exception geworfen werden und kein NoClassDefFoundError.
Versuche doch mal, Xvfbd zu installieren. Das ist ein virtueller
X-Server, der bei XFree erhältlich ist. Du startest vor Aufruf deiner
Servlet-Engine Xvfb mit einem Parameter für die Display-Nummer und setzt
und exportierst dann die DISPLAY-Variable entsprechend. Danach muss Du
dich um AWT nicht mehr sorgen, d.h. Du könntest dann theoretisch auch
Swing benutzen. :)
Sönke
> > Muß jetzt ein X-Server
> > (ist linux) laufen auf dem Webserver oder fehlen mir class-Dateien.
>
> Gute Frage.
> Es wäre nun gut zu wissen, welche Servlet-Engine Du benutzt. Evtl.
> JServ? Die Klassen sollten jedoch abhängig vom verwendeten JRE vorhanden
Ich glaub sobald das AWT Toolkit gestartet wird werden alle X-Libs
nachgeladen. Ich hatte das Problem schon mit einem simplen "beep",
den ich über die dazugehörige Toolkitfunktion ausführen wollte - ohne
installiertes X11 beept's nicht.
Images brauchen auf jeden Fall das AWT Toolkit.
--
Stephan Fuhrmann
> Ich hab schon bei google gesehen, dass das gar nicht so einfach ist
Nicht?
Bildaten in die ImageIO stopfen, encodieren und dann in den Out-Stream
des Servlets pumpen, wobei vorher der HTTP-Header entsprechend
vorbereitet werden muss... Voila... ;-)
> Ich hab auf den Server Bilddateien liegen, die möchte ich ins Servlet laden,
> daraus ein neues Bild machen und wieder als GIF ausgeben. GIF Encoder usw.
> alles kein Problem. Jetzt ist da die Geschichte mit dem Peer und dem
> grafischen Context. Ich hatte jetzt gelesen, das sich das mit BufferedImage
> umgehen läßt.
Das hoert sich nicht nach 1.4 an...
Das imHo einfachste waere es vermutlich, dem laufenden JRE die
ImageIO-Extension zu spendieren, und die Encodierung mit dieser
zu erledigen... Im Gegensatz zu dem Image-Support der alten core-API
werden dort iirc nirgends Peer's benoetigt oder sonstwie ein GDI
vorausgesetzt... Ausserdem arbeitet es sich imHo damit wesentlich bequemer... ;-)
> Egal welche Methode ich wähle, ich bekomme immer eine
> NoClassDefFoundException bei einer nativen Methode.
Ein passender StackTrace waere schoen und welche Klasse
Dein JRE denn meint nicht finden zu koennen...
Ciao
Chris
--
Manchmal denke ich, der beste Beweis dafuer, dass es anderswo im
Universum intelligentes Leben gibt, ist der, dass noch keiner versucht
hat, Kontakt mit uns aufzunehmen. (Calvin alias Bill Watterson)
Ein installieren der x libs hat auch nix gebracht. Die waren in der Tat
nicht installiert. Muß denn jetzt ein Server laufen? Dann bliebe ja wirklich
nur die Möglichkeit einen virtuellen laufen zu lassen. Oder halt einen
echten. Aber der müßte ja dann konfiguiert werden.
Gruß
Michael
Es heisst Einleitungs*zeile*, nicht Roman ;-)
>>> Egal welche Methode ich wähle, ich bekomme immer eine
>>> NoClassDefFoundException bei einer nativen Methode.
So wie ich das sehe, bekommst Du einen ganz normale
NCDFE... ;-)
>> Ein passender StackTrace waere schoen und welche Klasse
>> Dein JRE denn meint nicht finden zu koennen...
> java.lang.NoClassDefFoundError
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:120)
> at
> java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment
> .java:58)
> at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1011)
Koenntest Du dann noch bitte die Ausgabe von folgendem Code posten?
| System.out.println(java.security.AccessController.doPrivileged(
| new sun.security.action.GetPropertyAction(
| "java.awt.graphicsenv", null)));
Was dort ausgegeben wird sollte die Klasse sein, die er nicht findet...
Das 1.4 (1.3 auch schon?) ist dort ein wenig geschickter, da es bei einem
Enviroment ohne visuelles Ausgabemedium (called "headless") an dieser
Stelle selber ein eigenes quasi-virtuelles GraphicsEnviroment erstellt und nutzt...
Auch wuerde an dieser Stelle statt einem NCDFE ein normaler Error
geworfen der Form:
Could not find class: <the class not found>
> Ein installieren der x libs hat auch nix gebracht.
Was Wunder... ;-)
Es war ja auch ein NoClassDefFoundError und kein LinkageError... ;-)
Ciao
Chris
--
"Who's a little fear demon? Come on! Who's a little fear demon!"
"Don't taunt the fear demon."
"Why, can he hurt me?"
"No, it's just - tacky." (Xander & Giles [BtVS 4abb04 "Fear, Itself"])
> Es heisst Einleitungs*zeile*, nicht Roman ;-)
Yep hast recht, war zu faul zum rumformatieren.
> Koenntest Du dann noch bitte die Ausgabe von folgendem Code posten?
>
> | System.out.println(java.security.AccessController.doPrivileged(
> | new sun.security.action.GetPropertyAction(
> | "java.awt.graphicsenv", null)));
>
> Was dort ausgegeben wird sollte die Klasse sein, die er nicht findet...
> Das 1.4 (1.3 auch schon?) ist dort ein wenig geschickter, da es bei einem
Das werd ich mir mal merken, bzw. bei Zeit mal ausprobieren. Ich bin nur
etwas im Druck gewesen, was die Lösung betraff und JRE 1.4 hat das die
schnelle Lösung gebracht.
Wobei ich das mit der fehlenden Klasse nicht kann verstanden hab. Das JDK
ist ja komplett installiert gewesen und meine Klassen, bzw. das ist nur
eine, war auch da. Naja ich werden deinen Codeschnippsel eventl. mal testen.
Gruß
Michael