Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

loading resources form a jar file

Posted on 2003-11-17
13
Medium Priority
?
443 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
  • 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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 86

Accepted Solution

by:
CEHJ earned 90 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

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Question has a verified solution.

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

Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
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 third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
Suggested Courses

824 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