Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (480)
Games in Android Showcase (110)
games submitted by our members
Games in WIP (547)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Adding to the Webstart classpath  (Read 861 times)
0 Members and 1 Guest are viewing this topic.
Offline Orangy Tang

JGO Kernel


Medals: 56
Projects: 11


Monkey for a head


« Posted 2005-08-20 15:02:58 »

What I've got at the moment is a simple game which loads pretty much all of the resources from the classpath, including resorces which reference other resources. All is fine and dandy for development as I have a collection of dirs manually added to the classpath where my raw files sit. For webstart these get packed up into jars and all is good. Pretty standard stuff.

Now what I'd like to do is provide this as a webstart app, and then have another person able to add their own resources to it. They'd pick an external dir (say, C:\MyGame\Resources) and 'somehow' that dir would be added to my apps classpath and resources could be loaded from it without the game knowing there's any difference.

I'm slightly lost how to do this, my current thinking would be to provide a custom ClassLoader which would check this new dir manually first, then delagate pretty much everything else to the normal ClassLoader. Is this going to work? Anyone have any suggestions?

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Offline erikd

JGO Ninja


Medals: 16
Projects: 4
Exp: 14 years


Maximumisness


« Reply #1 - Posted 2005-08-20 18:51:58 »

I use the following code to add a directory with jars to the classpath. I don't know if this works with jws though.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
public class ClassPathExtender {
 private static final Class[] parameters = new Class[] {URL.class};

 public static void addExtDir(File dir) {
   if (dir.exists() && dir.isDirectory()) {
     File[] jars = dir.listFiles(new FilenameFilter() {
       public boolean accept(File dir, String name) {
         return name.toLowerCase().endsWith(".jar");
       }
    });
    for (int i = 0; i < jars.length; i++) {
      try {
        addFile(jars[i]);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  private static void addFile(File f) {
    URL u = f.toURL();
    URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
    Class sysclass = URLClassLoader.class;
    try {
      Method method = sysclass.getDeclaredMethod("addURL", parameters);
      method.setAccessible(true);
      method.invoke(sysloader, new Object[] { u });
    } catch (Throwable t) {
      t.printStackTrace();
      throw new IOException("Could not add URL " + u + " to system classloader");
   }
}


There might be some typos in it (typed it over from my laptop  Undecided)

Offline blahblahblahh

JGO Coder


Medals: 1


http://t-machine.org


« Reply #2 - Posted 2005-08-20 22:26:32 »

So...just to check...that adds any arbitrary class accessible via any URL (file, http, etc) using the system classloader, so that you don't get any problems with classloader-spaces causing class/class compares to fail for identical classes?

If it works...would you mind uploading that as a source file to JGF? Would be nice to have side-by-side with the ClassPath sources that scan the classpath for any class or implementor-of-an-interface.

malloc will be first against the wall when the revolution comes...
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Orangy Tang

JGO Kernel


Medals: 56
Projects: 11


Monkey for a head


« Reply #3 - Posted 2005-08-21 00:08:58 »

Yes, I've stumbled accross that a couple of times looking for a solution (with slight variations). It's a tad hacky what with relying on the system classloader to be a URLClassLoader but it does work rather nicely. I'm hoping that the Webstart classloader is also an URLClassLoader as well.

The 'proper' solution to what I'm after is supposed to be with a custom ClassLoader which checks my own resource locations. Unfortunatly the delagation method only checks a custom loader *after* the system classloader has failed to find something. But because an external class gets loaded fine with the system classloader it doesn't check 'further down' the delagation order and so my new loader never even gets a look in. I suspect to do that properly I'd have to re-implement an *entire* ClassLoader myself (effectivly ignoring the delagation method and going back to Java 1.1 classloader interface) but that's not something I particularly want to waste time doing.


So...just to check...that adds any arbitrary class accessible via any URL (file, http, etc) using the system classloader, so that you don't get any problems with classloader-spaces causing class/class compares to fail for identical classes?

Seems to, as you never add any additional loaders - you just extend the search paths for the existing one.

[ TriangularPixels.com - Play Growth Spurt, Rescue Squad and Snowman Village ] [ Rebirth - game resource library ]
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

atombrot (23 views)
2014-08-19 09:29:53

Tekkerue (22 views)
2014-08-16 06:45:27

Tekkerue (21 views)
2014-08-16 06:22:17

Tekkerue (12 views)
2014-08-16 06:20:21

Tekkerue (19 views)
2014-08-16 06:12:11

Rayexar (57 views)
2014-08-11 02:49:23

BurntPizza (37 views)
2014-08-09 21:09:32

BurntPizza (29 views)
2014-08-08 02:01:56

Norakomi (36 views)
2014-08-06 19:49:38

BurntPizza (66 views)
2014-08-03 02:57:17
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!