Avatar billede trp79 Nybegynder
26. april 2005 - 19:32 Der er 8 kommentarer og
1 løsning

War fil - NoClassDefFoundError ved brug jar

Hejsa
Når jeg bruger understående struktur får jeg en NoClassDefFoundError på en klasse, der er i jfreechart.

test2.war
  META-INF
    MANIFEST.MF
  WEB-INF
    classes
      Chart
        PieChart.class
        Methods.class
    web.xml
    lib
      jcommon-0.9.6.jar
      jfreechart-0.9.21.jar
  Index.html

Jeg lavede war filen således:
jar cvf test2.war *.html WEB-INF/web.xml WEB-INF/classes/Chart/*.class WEB-INF/lib/*.jar

er der nogen, der har en ide om, hvorfor jeg får fejlen, og hvad jeg kan gøre for at undgå den?

Der deployes på en udbyders resin server, hvis det skulle have noget at sige.

På forhånd tak, mvh
Torben
Avatar billede trp79 Nybegynder
27. april 2005 - 08:56 #1
NoClassDefFoundError er så den fejl jeg ser på skærmen(i browseren) - jeg får denne i error-loggen:
[2005/04/26 13:21:37] com.caucho.jsp.JspServlet: init
[2005/04/26 16:31:48] _index__jsp: init
[2005/04/26 16:32:11] _contact__jsp: init
[2005/04/26 16:45:27] com.caucho.server.http.FileServlet: init
[2005/04/26 16:45:27] com.caucho.server.http.DirectoryServlet: init
[2005/04/26 16:45:28] Chart.PieChart: init
[2005/04/26 16:45:33] Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:141)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
    at java.awt.Font.initializeFont(Font.java:308)
    at java.awt.Font.<init>(Font.java:344)
    at org.jfree.chart.plot.PiePlot.<clinit>(PiePlot.java:186)
    at org.jfree.chart.ChartFactory.createPieChart(ChartFactory.java:205)
    at Chart.PieChart.createChart(PieChart.java:78)
    at Chart.PieChart.doGet(PieChart.java:42)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
    at javax.servlet.http.HttpServle
t.service(HttpServlet.java:103)
    at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
    at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:346)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:534)
[2005/04/26 16:45:33] null
java.lang.NoClassDefFoundError
    at org.jfree.chart.ChartFactory.createPieChart(ChartFactory.java:205)
    at Chart.PieChart.createChart(PieChart.java:78)
    at Chart.PieChart.doGet(PieChart.java:42)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
    at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
    at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:346)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:534)
[2005/04/26 16:45:33] null
java.lang.NoClassDefFoundError
    at org.jfree.chart.ChartFactory.createPieChart(ChartFactory.java:205)......................

Resin serveren kører på en UNIX FreeBSD, hvis det har noget at sige?
Avatar billede arne_v Ekspert
27. april 2005 - 22:15 #2
Det lyder nærmest som de klassiske problem med at man ikke kan bruge AWT
klasser i background jobs på Unix.
Avatar billede arne_v Ekspert
27. april 2005 - 22:18 #3
For at verificere det så prøv og installer Resin hos dig selv (forudsætter at du
har en Linux box eller lignende).

Hvis du får problemet så prøv og start Resin med:
  -Djava.awt.headless=true
og se om problemet forsvinder.

Hvis det gåør det så ved vi hvad der er galt.

Og du kan gå i flæsket på tech support på web hoteller for at få dem
til at sætte den option.
Avatar billede trp79 Nybegynder
28. april 2005 - 08:53 #4
Jeg har desværre ikke en linuxboks, men jeg har kigget lidt mere rundt på google nu og kan se, at det er et forholdsvist normal problem med unix og awt, som du siger.
Så noget tyder altså på, at jeg skal have fat i webhotellet. Jeg har før set dig foreslå at lave en System.setProperty med headless=true. Men det virker vel kun på den klasse, hvor property sættes? Altså hvis man fx bruger et image objekt i en klasse, så skal propertien sættes i der. Hvorimod det ikke hjælper når det er en pakke man gør brug af?
Avatar billede arne_v Ekspert
28. april 2005 - 09:06 #5
Det er en global setting for alle klasser.

-Djava.awt.headless=true er til kommando linien for start af java

Du kan også prøve:

System.setProperty("java.awt.headless", "true");

inden der kaldes noget som helst AWT/JFreeChart.

En startup servlet måske !?

Men det kan meget vel tænkes at du ikke har permission til det !
Avatar billede trp79 Nybegynder
28. april 2005 - 09:29 #6
Jeg prøver lige i første omgang med System.setProperty("java.awt.headless", "true"); og hvis jeg ikke har rettigheder til det, ja så må jeg jo se om det kan lade sig gøre at dansite til at sætte den property i resin.

Nu sider jeg ikke lige derhjemme, men er det ikke nok at kalde system.set... i init metoden i den servlet som fx returnerer et jpeg billede lavet af jfreechart? (http://www.eksperten.dk/spm/607475). Naturligvis forudsat at jeg har de rettigheder der skal til...

Tak for hjælpen Arne - smid du bare et svar :)
Avatar billede arne_v Ekspert
28. april 2005 - 09:31 #7
Hvis det kun er en servlet, så er det helt fint.

Hvis du har 2137 servlets så er det nemmere med en startup servlet.
Avatar billede arne_v Ekspert
28. april 2005 - 09:31 #8
og svar
Avatar billede trp79 Nybegynder
28. april 2005 - 09:38 #9
Super Arne. Indtil videre har jeg kun en servlet, så det skulle være ret hurtigt at teste :)

Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester