[JAVA]Applet kan .class niet vinden

Pagina: 1
Acties:

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Ben bezig met een applet dat een SNMPclient zou moeten starten. Los van de verwachte security-problemen, gaat het al fout met de nodige classes die uit een JAR-file geladen moet worden. De client (SyncManager) functioneert zonder problemen wanneer hij standalone wordt gestart. De JAR-archives worden netjes vanuit de browser geladen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>

<H3></h3>
<HR WIDTH="100%">Applet HTML Page (Click <a href="ConfigureIE.htm">here</a>
for help how to configure your browser)<HR WIDTH="100%">

<P>
<APPLET code=winkApplet.class 
archive="SNMP/jsnmpapi.jar, SNMP/jdmkrt.jar, SNMP/jdmktk.jar"
width=770 height=570>
</APPLET>
</P>

<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>

IE6 laadt de benodigde JARs zonder problemen, zo lijkt het. Echter, de JAVA console toont problemen bij de eerste .class-file die geladen moet worden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
==============================================
Code base = http://imst440.imst.de/~dennis/Winkhaus/
Error loading class: com.sun.jdmk.snmp.SnmpOidTableSupport
java.lang.NoClassDefFoundError
SyncManager::init: Exception occurred:java.lang.ClassNotFoundException: com.sun.jdmk.snmp.SnmpOidTableSupport
java.lang.ClassNotFoundException: com.sun.jdmk.snmp.SnmpOidTableSupport
    at com/ms/vm/loader/URLClassLoader.loadClass (URLClassLoader.java)
    at java/lang/ClassLoader.loadClassInternal (ClassLoader.java)
    at SyncManager.init (SyncManager.java)
    at SyncManager.<init> (SyncManager.java:75)
    at winkApplet.init (winkApplet.java:54)
    at com/ms/applet/AppletPanel.securedCall0 (AppletPanel.java)
    at com/ms/applet/AppletPanel.securedCall (AppletPanel.java)
    at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
    at com/ms/applet/AppletPanel.processSentEvent (AppletPanel.java)
    at com/ms/applet/AppletPanel.run (AppletPanel.java)
    at java/lang/Thread.run (Thread.java)

Het vreemde is dat het ook niet werkt wanneer ik de .class uitpak en een subdir maak zodat com.sun.jdmk.snmp.SnmpOidTableSupport.class (onderdeel van jsnmpapi.jar) netjes op de server aanwezig is. Wat zie ik hier over het hoofd?
Ik gebruik IE6 i.c.m. de MS VM en Windows2000.
Voor de duidelijkheid: de HTML en de Applet.class worden wel gevonden en het applet werkt tot zoverre ook. Het probleem begint wanneer ik een .class uit de jsnmpapi.jar nodig heb.

[ Voor 32% gewijzigd door Swinnio op 26-08-2003 12:14 ]

If the world wouldn't suck, we'd all fall off


Verwijderd

Codebase meegeven?

Verwijderd

nou... ik weet waar aan het ligt ;p nouja bijna zeker

wat je hebt gedaan is waarschijnlijk alleen de classes in je Jar file gezet die JIJ hebt gemaakt. Als je nou ook de onderligende classes in je Jar opneemt is het probleem opgelost.

je kan die natuurlijk ook in een ander Jar zetten de keuze is aan jou :P

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Is dat nodig? Alles staat in de huidige of diepere directories dan de .html en de applet.class file en die vindt hij beide wel.

If the world wouldn't suck, we'd all fall off


  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Verwijderd schreef op 26 augustus 2003 @ 11:41:
nou... ik weet waar aan het ligt ;p nouja bijna zeker

wat je hebt gedaan is waarschijnlijk alleen de classes in je Jar file gezet die JIJ hebt gemaakt. Als je nou ook de onderligende classes in je Jar opneemt is het probleem opgelost.

je kan die natuurlijk ook in een ander Jar zetten de keuze is aan jou :P
De klassen die ik heb gemaakt, staan gewoon in de huidige dir, die zet ik later pas in een JAR, wanneer ik klaar ben.
De JAR die ik nu nodig heb, is een "standaard" JAR (behorende bij JDMK), die is ook voldoende om de client stand-alone (ofwel, vanaf een command prompt gestart) te laten lopen. Dat zou bij het gebruik door een applet toch niet anders moeten zijn?

If the world wouldn't suck, we'd all fall off


Verwijderd

nou.... wat je beschrijft in je opening... is dat de Applet in je IDE wel werkt en buiten je IDE niet... als je kijkt naar de console output:

geen classe definitie van onderandere "URLClassLoader.java" allemaal uit packet java.lang en applet

dit wilt zeggen dat in de Jar files jsnmpapi.jar, jdmkrt.jar en jdmktk.jar zeer waarschijnlijk geen definitie van deze classe heeft! als ie dat niet heeft kan dit Applet niet stand alone werken!!!!

dit kan je checken met behulp van PKzip.

hoe kan je dit oplossen:

- een Jar file in de archieve toevoegen die wel die packet java.lang , applet bevat. Weet niet de naam van de standaard Jar die deze bevat
- in een andere Jar file deze classes toevoegen uit packet java.lang, applet

Ik ben natuurlijk niet helemaal 100% zeker maar ik kan je zeggen dat ik voor 99.99% zeker weet dat het hier aan ligt. het lijkt er op dat die standaard Jar's die jij gebruikt niet java.lang en applet bevatten

  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08-2025
jsnmpapi.jar moet niet op de SERVER aanwezig zijn, maar op de CLIENT die de applet opstart. Dus zorgen dat die jar in het class-path van de CLIENT staat..

En de MS JVM gebruiken icm Sun classes is ook vragen om problemen, maar dat is een heel ander verhaal.. Want als je de Sun JVM gebruikt kun je die jsnmpapi.jar ook in de ext-dir van de JRE zetten... Maar ik denk dat je ook de sun JVM gebruikt, want anders zou je Java-console niet hebben :D

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Verwijderd schreef op 26 August 2003 @ 13:31:
nou.... wat je beschrijft in je opening... is dat de Applet in je IDE wel werkt en buiten je IDE niet... als je kijkt naar de console output:

geen classe definitie van onderandere "URLClassLoader.java" allemaal uit packet java.lang en applet

dit wilt zeggen dat in de Jar files jsnmpapi.jar, jdmkrt.jar en jdmktk.jar zeer waarschijnlijk geen definitie van deze classe heeft! als ie dat niet heeft kan dit Applet niet stand alone werken!!!!

dit kan je checken met behulp van PKzip.

hoe kan je dit oplossen:

- een Jar file in de archieve toevoegen die wel die packet java.lang , applet bevat. Weet niet de naam van de standaard Jar die deze bevat
- in een andere Jar file deze classes toevoegen uit packet java.lang, applet

Ik ben natuurlijk niet helemaal 100% zeker maar ik kan je zeggen dat ik voor 99.99% zeker weet dat het hier aan ligt. het lijkt er op dat die standaard Jar's die jij gebruikt niet java.lang en applet bevatten
Dat klopt, de door mij gebruikte JARs bevatten specifieke SNMP-code en bevatten dus geen java.lang en applet.
Maar voordat ik classes in deze JARs gebruikte, werkte het applet zonder problemen. Ook toen had ik nergens het packet java.lang beschikbaar. Dat wil zeggen, ik heb het niet toegevoegd en het bevindt zich ook niet in de directory waar al mijn specifieke .class-files zich bevinden. Is het dan zo dat ik java.lang.* nodig heb omdat ik vanuit het applet iets uit een .JAR wil halen?
Overigens is mijn opening misschien iets onduidelijk beschreven. Het applet werkt ook niet vanuit de IDE. Wat wel werkt, zijn de classes die gebruik maken van de specifieke .JAR-bestanden die ik heb toegevoegd. Zo kan ik de SyncManager (waar de eerste fout optreedt) wel gewoon m.b.v. de command prompt starten. Beetje duidelijk? :)
Wat er waarschijnlijk ook mee te maken heeft (en wat ik pas net ontdek): als ik SyncManager.java in een onderdirectory zet en dit d.m.v. package aangeef, wordt dit zonder problemen gecompileerd en gerund vanaf een command prompt. Het applet is het er echter niet mee eens en kan SyncManager.class niet vinden. Nu gaat het dus al eerder fout doordat ik een dir dieper moet zijn.
Ik moet gewoon ergens een stomme denkfout maken, heb ik het idee....

[ Voor 12% gewijzigd door Swinnio op 26-08-2003 13:50 ]

If the world wouldn't suck, we'd all fall off


  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
pgussow schreef op 26 augustus 2003 @ 13:41:
jsnmpapi.jar moet niet op de SERVER aanwezig zijn, maar op de CLIENT die de applet opstart. Dus zorgen dat die jar in het class-path van de CLIENT staat..
De client kan toch deze .jar van de server halen, dat is juist het handige van applets! Overigens werkt het evenmin als de betreffende jar-files in het classpath van de client staan.
En de MS JVM gebruiken icm Sun classes is ook vragen om problemen, maar dat is een heel ander verhaal.. Want als je de Sun JVM gebruikt kun je die jsnmpapi.jar ook in de ext-dir van de JRE zetten... Maar ik denk dat je ook de sun JVM gebruikt, want anders zou je Java-console niet hebben :D
Nee, gebruikt de MS JVM. Bovenaan in de console staat:
Microsoft (R) VM for Java, 5.0 Release 5.0.0.3810

If the world wouldn't suck, we'd all fall off


Verwijderd

ehm, ik heb ooit ('k heb nog niemand gehoord met hetzelfde probleem, maar toen was het echt zo) een applet gehad die onder IE steeds exceptions gaf van noclassdeffounderror.
Wat ik toen deed was ipv jdk1.4 compilen met jdk1.3 en alles ging foutloos. Meer heb ik echt neit veranderd. Browsers met de SUN JDK geinstalleerd deden het trouwnes vlekkeloos....
misschien is het dat ook (ofwel lag het puur cliënt side bij mij)

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Het probleem lijkt inderdaad opgelost nadat ik JRE1.3 geinstalleerd heb en de SUN VM in plaats van de van MS gebruikt. Weet helaas nog steeds niet wat precies het probleem was, maar het werkt en dat is het belangrijkste :)

If the world wouldn't suck, we'd all fall off


Verwijderd

wel, probeer eens met 1.3 te compilen, volgens mij slikt die MS VM dat dan weer wel...(ik heb er héél lang op gezocht toen, maar toevallig eens op andere PC gecompiled en het werkte ineens...nergens op internet iets van teruggevonden)

  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Verwijderd schreef op 28 augustus 2003 @ 10:13:
wel, probeer eens met 1.3 te compilen, volgens mij slikt die MS VM dat dan weer wel...(ik heb er héél lang op gezocht toen, maar toevallig eens op andere PC gecompiled en het werkte ineens...nergens op internet iets van teruggevonden)
Compileerde tot voor kort sowieso met de optie -target 1.1, vandaar dat ik met -target 1.3 niet veel verschil merk. Heb meer het idee dat het ligt aan de combinatie van MS VM en het importeren van klassen van Sun.

If the world wouldn't suck, we'd all fall off


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Gooi anders ff je html door de html converter (zit in de bin dir van je jdk instalatie). De applet tag is namelijk een beetje depricated. Door de object tag te gebruiken kun je 'afdwingen' dat mensen de juiste jre versie gebruiken en dit soort dingen dus voorkomen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Swinnio
  • Registratie: Maart 2001
  • Laatst online: 18-08 09:00
Janoz schreef op 28 augustus 2003 @ 10:47:
Gooi anders ff je html door de html converter (zit in de bin dir van je jdk instalatie). De applet tag is namelijk een beetje depricated. Door de object tag te gebruiken kun je 'afdwingen' dat mensen de juiste jre versie gebruiken en dit soort dingen dus voorkomen.
Wist niet dat "een beetje deprecated" ook bestond ;)
Dat afdwingen van de juiste versie heeft natuurlijk wel als nadeel dat mensen die niet over de mogelijkheid beschikken ter plekke een nieuwere JRE-versie te installeren, niet eens de mogelijkheid krijgen het applet uit te voeren.

If the world wouldn't suck, we'd all fall off

Pagina: 1