What kind of path (absolute, relative, Windows, Unix) should there be inside a .getResource() parent

Discussion in 'Java' started by Ramon F Herrera, Oct 28, 2007.

  1. I am porting to NetBeans an application that was running fine under
    JBuilder. There is one type of statement that refuses to be ported.

    The application contains a lot of lines like this:

    url = AnnualReportsDialog.class.getResource("images/Check Mark.gif");

    Even the JBuilder tutorial has the same kind of file access relative
    to some current or default directory:

    ImageIcon image1 = new
    ImageIcon(hello_world.HelloWorldFrame.class.getResource("openFile.png"));

    When the "url" line above is reached, the getResource() fails.

    I have tried several variations:

    url = AnnualReportsDialog.class.getResource("C:\\images\\Check
    Mark.gif");
    url = AnnualReportsDialog.class.getResource("C:/images/Check
    Mark.gif");

    but they don't work.

    Perhaps something has changed between JRE 1.4 and 1.6?

    What is the more general solution to the problem of Java not having a
    'chdir()'? My app runs on Windows but I would like to run in in *ix as
    well.

    Is there a way to place all those GIFs in some sort of resource, that
    can be carried around different O/Ss and filesystem paths?

    TIA,

    -Ramon
     
    Ramon F Herrera, Oct 28, 2007
    #1
    1. Advertising

  2. Ramon F Herrera wrote:
    >I am porting to NetBeans an application that was running fine under
    >JBuilder. There is one type of statement that refuses to be ported.
    >
    >The application contains a lot of lines like this:
    >
    >url = AnnualReportsDialog.class.getResource("images/Check Mark.gif");


    Try..
    url = AnnualReportsDialog.class.getResource("/images/Check Mark.gif");

    Note the leading '/' means roughly 'the root of the classpath'.
    ...
    >Is there a way to place all those GIFs in some sort of resource, that
    >can be carried around different O/Ss and filesystem paths?


    Sure. Put them in an images directory, jar it, add the jar
    to the application's runtime classpath, and reference them
    as above. So long as you are not using the default
    classloader, the images should be located.

    --
    Andrew Thompson
    http://www.athompson.info/andrew/

    Message posted via JavaKB.com
    http://www.javakb.com/Uwe/Forums.aspx/java-general/200710/1
     
    Andrew Thompson, Oct 29, 2007
    #2
    1. Advertising

  3. Ramon F Herrera

    Nigel Wade Guest

    Ramon F Herrera wrote:

    >
    > I am porting to NetBeans an application that was running fine under
    > JBuilder. There is one type of statement that refuses to be ported.
    >
    > The application contains a lot of lines like this:
    >
    > url = AnnualReportsDialog.class.getResource("images/Check Mark.gif");



    >
    > Even the JBuilder tutorial has the same kind of file access relative
    > to some current or default directory:
    >
    > ImageIcon image1 = new
    > ImageIcon(hello_world.HelloWorldFrame.class.getResource("openFile.png"));
    >
    > When the "url" line above is reached, the getResource() fails.
    >
    > I have tried several variations:
    >
    > url = AnnualReportsDialog.class.getResource("C:\\images\\Check
    > Mark.gif");
    > url = AnnualReportsDialog.class.getResource("C:/images/Check
    > Mark.gif");
    >
    > but they don't work.
    >
    > Perhaps something has changed between JRE 1.4 and 1.6?
    >
    > What is the more general solution to the problem of Java not having a
    > 'chdir()'? My app runs on Windows but I would like to run in in *ix as
    > well.
    >
    > Is there a way to place all those GIFs in some sort of resource, that
    > can be carried around different O/Ss and filesystem paths?
    >
    > TIA,
    >
    > -Ramon


    That URL specifies that the resource to be loaded is in the directory "images"
    relative to the location of the class file AnnualReportsDialog.class. So, if
    the class file is in my/package/name/AnnualReportsDialog.class then the above
    will attempt to open my/package/name/images/Check Mark.gif. If that class is
    being loaded from a jar then the gif should be in the jar.

    In NetBeans this means you should put it in the project directory
    src/my/package/name/images. When you build the project the file ought to be
    included in the jar under the same path, and therefore accessible to the
    classloader. Similarly, if you create the directory src/images within the
    project source then you can access that directory with the URI /images in your
    code, i.e. AnyClass.getClass().getResource("/images/image.img"). Because it's
    an absolute URI the actual class you use is irrelevent (provided you're not
    being inventive with class loaders), and implicit use of this.getClass() (i.e.
    just getClass().getResource() in a non-static context) should suffice.

    --
    Nigel Wade, System Administrator, Space Plasma Physics Group,
    University of Leicester, Leicester, LE1 7RH, UK
    E-mail :
    Phone : +44 (0)116 2523548, Fax : +44 (0)116 2523555
     
    Nigel Wade, Oct 29, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Matt
    Replies:
    3
    Views:
    19,726
    Sudsy
    Jul 8, 2004
  2. kempshall

    Class.getResource path resolution

    kempshall, Jan 3, 2006, in forum: Java
    Replies:
    2
    Views:
    25,920
    Chris Smith
    Jan 4, 2006
  3. Thomas Guettler
    Replies:
    3
    Views:
    792
    Andrei
    Oct 27, 2003
  4. Nigel Wilkinson
    Replies:
    2
    Views:
    421
    Nigel Wilkinson
    Jul 25, 2005
  5. James Byrne
    Replies:
    3
    Views:
    627
    James Byrne
    Sep 14, 2010
Loading...

Share This Page