03. marts 2003 - 13:15Der er
4 kommentarer og 1 løsning
SystemRessource()
Tidligere havde jeg et spørgsmål om hvordan man kan finde ud af hvor den klasse man benytter sig af ligger henne af. Dette gøre ved blandt andet at finde navnet på classen og så bruge this.getClass().getClassLoader().getSystemResource(sb.toString()).getPath(). Den del af det hele virker ganske glimrende.
Men når en anden klasse, der ligger i en anden pakke prøver at benytte sig af den, går det galt. Eksempel:
klasse1 ligger i /test/pakke1/klasse1 og i dens konstruktør bliver der oprettet en string hvor den henter dens egen sti via overnstående linie.
klasse2 ligger i /test/pakke2/klasse2 og opretter en instans af klasse1.
Men i klasse2 kommer der en nullPointerException, og vi har fundet frem til hvor den kommer. this.getClass().getClassLoader().getSystemResource(sb.toString()) returnerer simpelthen null, da den ikke kan finde ressourcen, hvilket vi gætter er fordi den ligger i en anden pakke. Men burde klasse1 ikke selv udføre opslaget af stien når den bliver instantieret, eller bliver vi nød til at lave den til en tråd for at få det til at virke?
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
Hvis det ikke er noget så banalt, at du skal bruge: Class.forName("pakkenavn.klassenavn") i stedetfor: this.getClass() så tror jeg at et lille eksempel vil gøre det nemmere at forstå hvad det er du gør og foreslå en løsning.
Har grumlet lidt over det, og det lader til at hvis man benytter getResource() istedet for getSystemResource() så virker det. Umiddelbart kan jeg bare ikke se forskellen på de to.
Jeps arne, er også den jeg har brugt. Men getSystemResource(sb.toString) returnerer null, mens getResource(sb.toString) returnerer den rigtige URL. Lader til at getSystemResource() kun kigger i en bestemt mappe mens getResource er mere fri til at finde dem.
private String getSti() { String cn = this.getClass().getName(); StringTokenizer st = new StringTokenizer(cn,"."); StringBuffer sb = new StringBuffer(""); boolean first = true;
while(st.hasMoreTokens()) { if(first) first = false; else sb.append("/"); sb.append(st.nextToken()); }//end while
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.