07. januar 2003 - 13:47Der er
33 kommentarer og 1 løsning
Kan man få systemets fulde sti for en given klasse-ressource
Hejsa ... Jeg har en applet, som bruger en ekstern package...
Nu er det sådan, at jeg har lagt mærke til at appletten kører - også selvom jeg fjerner .jar-filen som den eksterne package ligger i fra den sti, som jeg tidernes morgen opgav som projektets classpath. Packagen ligger hellerikke i systemets classpath..
Hvordan kan det lige gå til...
Såh, nu har jeg besluttet mig, at teste det...
Er der nogen måde, hvormed jeg kan få fat i, hvor i filsystemet, den finder objekter denne eksterne package...
Altså kan jeg i en en klasse få udskrevet, URL'en for en given klasse X - f.eks. på formen "Klasse X bliv fundet i filen C:\subdir\misc.jar
Jeg ved godt hvor misc.jar ligger på systemet .. Det, der undrer mig, det er, hvordan appletten kan finde ud af at få fat i denne package, selvom der ikke burde ligge nogle informationer om, hvor denne jar-fil er henne ... Den er endda flyttet fra det sted, hvor den lå, da appletten blev kompileret...
Så - hvordan kan jeg (når jeg kører appletten) få udskrevet, hvor den har fundet denne klasse X henne (for den ligger ikke i nogen path)
Jeg har ikke fået svar på spm'et - heller ikke hos de andre java-guru'er jeg kender -- Jeg vælger at lukke spm'et og tildeler points til arne_v, da han pegede videre i en retning...
Tjoo.. Men den løsning, du kommer frem til ( String getPath() ) - så vidt jeg læser den, så skal jeg ind i den eksterne package og implementere gerPath-metoden på min klasse X ????
Jeg har ikke sourcen til den omtalte eksterne package (er en jar-fil, som jeg ikke har noget med at gøre)
Kan jeg da stadigvæk bruge løsningen fra det andet spm ?
Hej Arne ... Ved nærlæsning fik jeg omformet min kode, til også at indeholde _noget_ af dit forrige svar -- Omend jeg ikke har fået udskrevet path osv. endnu, så var der en ting, der slog mig...
Selvom jeg importer netscape.javascript.*; for at få fat i netscape.javascript.JSObject;
så, når jeg udskriver stringbufferen (SB), så får jeg outputtet "SB = sun/plugin/javascript/ocx/JSObject.class"
Dvs. at det går ind og bruger en af suns egne klasser i stedet for (sikkert fordi den ikke kan finde netscape-jar'en nogen steder :-)
At jeg ikke kan få skrevet path ud, skyldes måske at det er en applet ???? Ved ikke om SercurityManageren går ind og brokker sig (får dog ingen exceptions)
Spørgsmålet er så bare - hvor ligger sun.plugins.javascript.ocx.JSObject så henne :-)
(har nemlig afprøvet koden på en anden maskine som kun havde Applet-plugin installeret -- og der kørte det ikke en meter :-/ )
// åbenbart kommer koden aldrig forbi her --- "Path = ..." bliver aldrig udskrevet String path = this.getClass().getClassLoader().getSystemResource(sb.toString()).getPath(); System.out.println("Path = "+path); } catch(Exception ex) { getAppletContext().showStatus(ex.toString()); } }
private class JSTask extends TimerTask { private Date data = new Date(); public void run() { String status = (String) win.getMember("status"); if(status.equals("running")) data = new Date(); win.eval("data='"+data.toString()+"'"); win.eval("updateData()"); } } }
Min mistanke er at JSObject er et interface, at getWindow returnerer en rigtig klasse (og getClass().getName() naturligvis returnerer naturligvis det rigtige klasse-navn).
Jeg er igang med at lave et eksempel med en hjemmeside, som bliver hele tiden bliver opdateret med nye data - Uden at browseren skal til at reloade dele af siden - i stedet bruges en applet til at hente data - og Javascript til at skrive data'ene de rigtige steder....
Faktisk skulle det blive til en artikel inden længe (Medions har oprettet et site (it-arkiv.dk), hvor der skal ligge artikler om forskellige programmeringsting - men det er lige startet....
Faldt lige over denne sætning i Developer Guiden "To compile java code to take advantage of JSObject, you must have the package netscape.javascript in the classpath. Currently, Java Plug-in 1.3 ships netscape.javascript in a jar file called JAWS.jar. To compile an applet which uses JSObject, add JAWS.jar in the classpath before compilation"
Ja .. Den ligger C:\Programmer\Java\j2re1.4.1_01\lib\jaws.jar
Og der kan jeg se at netscape.javascript.JSObject er en abstrakt klasse
derudover kan jeg se at sun.plugin.javascript.ocx.JSObject extender den abstrakte klasse sun.plugin.javasctipt.JSObject som extender netscape.javascript.JSObject
Derfor er det jo ret sandsynligt, at mit netscape.javascript.JSObject egenligt bruges som et interface i forhold til sun.plugin.javascript.ocx.JSObject
Men det betyder, at man bare skal sørge for at add'e jaws til classpath og sørge for at browseren har plugin 1.3 eller nyere.... (i think :-)
Synes godt om
Ny brugerNybegynder
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.