Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[SERVLET] images dynamisch erstellen

1 view
Skip to first unread message

Michael Thelen

unread,
Mar 21, 2002, 4:06:39 PM3/21/02
to
Hallo zusammen!!

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


Patrick Roemer

unread,
Mar 21, 2002, 5:27:16 PM3/21/02
to
Hallo,

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.

http://www.eteks.com/pja/en/

Oder xvfb.

Viele Gruesse,
Patrick

Sönke Müller-Lund

unread,
Mar 21, 2002, 6:09:53 PM3/21/02
to
Moin Michael,

> 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

Stephan Fuhrmann

unread,
Mar 21, 2002, 6:46:06 PM3/21/02
to
On Fri, 22 Mar 2002, Sönke Müller-Lund wrote:

> > 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

Christian Wederhake

unread,
Mar 21, 2002, 5:10:39 PM3/21/02
to
"Michael Thelen" <mich...@gmx.net> schrieb

> 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)

Michael Thelen

unread,
Mar 22, 2002, 1:32:25 PM3/22/02
to

"Christian Wederhake" <for...@cawgod.com> schrieb im Newsbeitrag
news:cc404ee3f4193dc5...@cawgod.com...
> "Michael Thelen" <mich...@gmx.net> schrieb

>
> > 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...
>
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)

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


Christian Wederhake

unread,
Mar 22, 2002, 7:02:47 PM3/22/02
to
"Michael Thelen" <mich...@gmx.net> schrieb

> "Christian Wederhake" <for...@cawgod.com> schrieb im Newsbeitrag
> news:cc404ee3f4193dc5...@cawgod.com...

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"])

Michael Thelen

unread,
Mar 23, 2002, 11:12:54 AM3/23/02
to

"Christian Wederhake" <for...@cawgod.com> schrieb im Newsbeitrag
news:0f6f612f01b32e92...@cawgod.com...

> 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


0 new messages