Solved

loading resources form a jar file

Posted on 2003-11-17
13
440 Views
Last Modified: 2010-08-05
i want to bundle all my resources in a jar file. how do i make that transparent to all my classes that use resources ? now i have classes that load icons refered by their filenames (such as loadIcon(".res/myicon.gif")), and i would like them to work the same when i change my resources from a dir to a jar.
0
Comment
Question by:hapciu
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
  • 3
13 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 9767570
You can do

new ImageIcon(getClass().getResource("/res/myicon.gif"));
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9767575
Or if you ensure your loadIcon method is overloaded to take a URL as a parameter then you'll also be fine with

loadIcon(getClass().getResource("/res/myicon.gif"));
0
 

Author Comment

by:hapciu
ID: 9767676
what is getClass and whom do i call it upon ??
thanks
0
Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

 
LVL 86

Accepted Solution

by:
CEHJ earned 30 total points
ID: 9767694
getClass() is called on the this reference so you should be fine unless there is no 'this' in scope.
0
 

Author Comment

by:hapciu
ID: 9767830
it kinda works. but getResource gives me an url and i can't make a file / filename out of that url (and that's what i need unfortunately). is it pssible to get a file or filename (or an uri) from an url  ?
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 9769551
Just use the URL as a filename string because a URL has a .toString() method.
Just check that the URL is not null.
;JOOP!
0
 

Author Comment

by:hapciu
ID: 9770450
well, url.toString() or url.getFile() return a string which isn't my file's name, but a full name with protocol, host and everything. if i feed that string to a new File(String name) i get an exception. i guess the only way is to parse that string and extract my filename. but thanks anyways.
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 9770512
I cut this from one of my applications, why should it not work for you?

   /**
    * Safely get the path to a resource file via Class info.
    * <p>If the file is missing, assuming that the resource was an image file,<BR>
    * the packaged <b>MISSING.gif</b> icon is substituted,
    * using the class info <b>packageClass</b> retrieved elsewhere.</p>
    * @param  classinfo   a Class loaded from the root of relative pathname.
    * @param  filename    the relative pathname to the resource file.
    * @return             an URL to the resulting resource.
    */
   private static URL findResource(Class classInfo, String filename)
   {
   URL resourceURL;

      if(classInfo == null)
      {
         fatal("BAD CLASS INFO");
      }

      if((resourceURL = classInfo.getResource(filename)) == null)
      {
         error("RESOURCE FILE '" + filename + "' MISSING.");
         if((resourceURL
            = packageClass.getResource("res/MISSING.gif")) == null)
         {
            fatal("SUBSTITUTE IMAGE 'MISSING' NOT FOUND.");
         }
      }
      return(resourceURL);
   }


// And deploying this in my program elsewhere (assume JFrame mainFrame;   ):

   /**
    * Set the default icon on the program main JFrame.
    * <p>Can be used to reset the icon after calls with an argument.<BR>
    * The default icon should be <b>res/<program>.gif</b>.</p>
    */
   public static void setMainFrameIcon( )
   {
      mainFrame.setIconImage
      (
         Toolkit.getDefaultToolkit().getImage(findResource(this.getClass( ), "res/Application.gif"))
      );
   }


;JOOP!
0
 

Author Comment

by:hapciu
ID: 9770540
that should work, i admit. but i need to open an inputStream on that file (which is not an icon, it's a properties file bundled with my resources) - and inputStream NEEDS a file. so i have to get a File from the url your method returns.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9772228
InputStream in = getClass().getResourceAsStream("/res/myicon.gif");
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 9772240
Sorry, missed this:

>>it's a properties file bundled with my resources

therefore

Properties props = new Properties();
props.load(getClass().getResourceAsStream("/res/myProps.properties"));
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 9776697
hapciu, next time ask your question right!
You didn't ask for file resources.
Anyway, the last answer by CEHJ is the one that deserves points.
;JOOP!
0
 

Author Comment

by:hapciu
ID: 9781085
ok, so i didn't say the whole thing right from the start... :P
sorry for that and thanks for your help, both of you.
0

Featured Post

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
The viewer will learn how to implement Singleton Design Pattern in Java.
Suggested Courses

635 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question