Avatar billede vandspand Nybegynder
21. februar 2005 - 15:15 Der er 22 kommentarer

problemer med at loade et image

Hej jeg har et problem dem at loade et image..
jeg får denne her exeption:

Error loading Image images/woodpine.jpg
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException


det er ikke så fint...

det er en applet jeg laver.. har det noget med sagen at gøre??
og lidt hjælp til en løsning ville være perfekt

vandspand
Avatar billede arne_v Ekspert
21. februar 2005 - 15:26 #1
Loader du den via class loader og get resource ?
Avatar billede vandspand Nybegynder
21. februar 2005 - 15:35 #2
Jeg bruger textureLoader.. jeg er ikke helt med på dit spørgsmål... jeg skal benytte billedet til textures i java3D...
Avatar billede arne_v Ekspert
21. februar 2005 - 19:13 #3
Må vi se lidt kode ?
Avatar billede snoop_one Nybegynder
21. februar 2005 - 23:03 #4
Kommer nok af, at dit billede ikke bliver loadet ind - når du så bruger det for første gang så kommer den exception.
Ovenstående er jeg dog ikke helt sikker på (kun et bud) - er lidt svært at lave et mere kvalificeret bud uden at kende til mere end de to linier.
Avatar billede vandspand Nybegynder
22. februar 2005 - 08:20 #5
ja der er ikke så meget kode men her er hvad den basicly gør:


import com.sun.j3d.utils.image.TextureLoader;
import java.awt.Image;
import java.net.URL;
import java.awt.Component;

public class NewTextureLoader extends TextureLoader {

    public NewTextureLoader(String fname){
        super("images/" + fname, observer);
    }

    static Component observer;

    public static void setImageObserver(Component imageObserver){
        observer = imageObserver;
    }

    public static Component getImageObserver(){
        return observer;
    }


Det var så det.. det virker fint lokalt men når så jeg skal til at benytte den i min applet er det den brokker sig..
og jeg har sendt biblioteket med over i jar filen...
det skal lige siges at det var et stykke kode jeg har funde på nettet og har været så fri at kopiere..
Avatar billede snoop_one Nybegynder
22. februar 2005 - 08:36 #6
Du skal nok gøre som arne_v foreslår, dvs. benytte dig af klassens ressource manager eller klasse loaderens ressource manager...
Den måde du henter dit billede ind på er en typisk begynder fejl... (du er ikke den første der er stødt ind i problemet ;-) )
dvs. noget lign.

getClass().getResource("path")

Hvor path så er path'en til filen - relativt fra din NewTextureLoader.class fil.
Avatar billede vandspand Nybegynder
22. februar 2005 - 08:37 #7
ok... har du et konkret eksempel??
Avatar billede vandspand Nybegynder
22. februar 2005 - 13:42 #8
nå men jeg kan ikke helt komme videre.. jeg vil til at lure lidt på den der med ressource manageren...

men her er lige toppen af exeptionen hvis det er....

Error loading Image images/woodpine.jpg
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.media.j3d.ImageComponent2D.<init>(ImageComponent2D.java:167)
    at com.sun.j3d.utils.image.TextureLoader.getImage(TextureLoader.java:523)
    at engine.Wall3D.createAppearance(Wall3D.java:343)
    at engine.Wall3D.<init>(Wall3D.java:50)
    at engine.Generate3D.generate3D(Generate3D.java:114)
    at engine.Generate3D.startShowing3D(

kom så arne v jeg ved du kan hjælpe med den her.... guru
Avatar billede vandspand Nybegynder
22. februar 2005 - 14:02 #9
Hey

når jeg kører this.getClass().getResource(filename);

får jeg en nullPointer.....

det er fordi getResource() giver null.... Det er jo ikke fedt.. men hvad sker der??
Avatar billede vandspand Nybegynder
22. februar 2005 - 14:54 #10
jeg har endt ud med at ligge billederne ved siden af jar filen.. det var lige det eneste jeg kunne finde på..
det virker meget godt men jeg ville jo gerne have dem til at ligge inde i jar filen...
Avatar billede snoop_one Nybegynder
22. februar 2005 - 16:29 #11
package test;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ImageViewer {
   
    public static void main(String[] args) {
        JFrame frame = new JFrame("Image Viewer");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ImageViewer imgv = new ImageViewer();
        JLabel imagelabel = new JLabel(imgv.getImage());
        frame.add(imagelabel);
        frame.pack();
        frame.setVisible(true);
    }

    private ImageIcon getImage() {
        return new ImageIcon(getClass().getResource("images/TileBlue.jpg"));
    }
}
Avatar billede snoop_one Nybegynder
22. februar 2005 - 16:31 #12
fil struturen ser således ud:
+ test
  ImageViewer.class
  + images
    TileBlue.jpg
Avatar billede snoop_one Nybegynder
22. februar 2005 - 16:32 #13
Kunne evt. også sende dig jar filen hvis du vil se den?
Avatar billede snoop_one Nybegynder
22. februar 2005 - 16:39 #14
Det skal lige siges, at ovenstående kode er testkode (som pakke navnet antyder) dvs. jeg anbefaler dig ikke at bruge det i dit program da den indeholder design fejl!

Det der skal lægges mærke til er, at getResource(path) henter den resource relativ til din klassefil. Hvis du vil have den "absolutte" i stedet for, må du lige sige til...
Avatar billede vandspand Nybegynder
23. februar 2005 - 08:30 #15
vil det sige at hvis jeg skal hente et billede med getResource(path) så skal billederne ligge i den samme mappe som selve class filen?? har jeg ret i det?? eller er jeg fuldstændig off?

og hvordan kan det være at jeg får en nullPointer når jeg forsåger at benytte getResource(path)?
Jeg mener hvis jeg laver en sysout på this.getClass().getResource(path) skriver den null ud... det er ikke super nice...
Avatar billede arne_v Ekspert
23. februar 2005 - 09:37 #16
get resource henter fra samme path som .class filerne

null pointer antyder a path og placering ikke matcher
Avatar billede vandspand Nybegynder
23. februar 2005 - 09:53 #17
Nu spørger jeg nok dumt men...
Vil det sige at når jeg i min jar fil har den klasse der henter billederne ligger i:

core/engine/3dGenerator

og billederne ligger i:

vandspand/images

at jeg kalder getResource med en forkert path?

hvilken path skal jeg så kalde i getResource()??

er det hele URL'en eller hvad er det?? jeg er lidt forvirret.
Avatar billede arne_v Ekspert
23. februar 2005 - 10:24 #18
vandspand/images/noget.gif

i jar filen skal hentes som

.getResource("vandspand/images/noget.gif");
Avatar billede vandspand Nybegynder
23. februar 2005 - 10:54 #19
ok cool... jeg forsøger...

Men jeg vender tilbage hvis det ikke virker...

så vær på vagt arne_v.....
Avatar billede snoop_one Nybegynder
23. februar 2005 - 21:57 #20
Hvis du har din klasse fil i,
  core/engine/3dGenerator

og dine billeder i,
  vandspand/images

Så er det nemmere at benytte klassens classloader dvs.:
this.getClass().getClassLoader().getResource("vandspand/images/billede.gif");
Avatar billede arne_v Ekspert
10. april 2005 - 18:34 #21
vandspand ??
Avatar billede snoop_one Nybegynder
19. september 2005 - 23:33 #22
lukketid?
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