Jars durch Java Programm einlesen?

Renji

Grünschnabel
Hallo,

ich habe von Java noch nicht so viel Ahnung, aber ich finde ich mitlerweile ganz gut zurecht, da ich in diversen anderen Programmiersprachen Kenntnisse habe und ausserdem Eclipse nutze ;)

Nunja, mein Programm dient dazu, dass meine User gegeneinander Kartenspiele spielen können.

Das ganze soll übert Plugins funktionieren.

Ich habe einen Ordner -> TCGOnline.resources/game.resources/

Dieser beinhaltet ->

TCGOnline.resources/game.resources/magic-plugin.jar
TCGOnline.resources/game.resources/naruto_de-plugin.jar
TCGOnline.resources/game.resources/naruto_us-plugin.jar
TCGOnline.resources/game.resources/yugioh-plugin.jar

[..]

Nun sieht z.Z. meine Plugin-Klasse wie folgt aus:

Java:
import java.io.File;

import javax.swing.JFrame;

/**
 * 
 * @author Sebastian Nette
 *
 */
public class PluginSystem 
{
	protected String[] PluginNames = new String[20];
	protected JFrame[] RunningPlugins = null;
	
	protected int PluginsRegistered = 0;
	
	/*
	 * start plugin
	 */
	public void runPlugin(String string) 
	{
		// register plugins
		if(PluginsRegistered == 0)
		{
			registerPlugins();
		}
		// try to find our plugins
		int PluginFound = 0;
		for(int i = 0; i < PluginsRegistered; i++)
		{
			if(PluginNames[i].equals(string))
			{
				PluginFound = 1;
			}
		}
		if(PluginFound == 1) 
		{
			startPlugin(string);
		}
		else
		{
			noPluginFound(string);
		}
	}

	/*
	 * no plugin found... 
	 */
	private void noPluginFound(String string) 
	{
		System.out.println("Plugin '" + string + "' not found");
	}

	/*
	 * get the jar... and start it?!
	 */
	private void startPlugin(String string) 
	{
		String jar = DEFINED.RESOURCE_DIR + "game.resources/" + string + "-plugin.jar";
		System.out.println("Plugin -> " + jar);
	}

	/*
	 * get the plugins
	 */
	private void registerPlugins() 
	{
		File myDir = new File(DEFINED.RESOURCE_DIR + "game.resources/");
		File[] contents = myDir.listFiles();
		for (File f : contents)
		{
			PluginNames[PluginsRegistered] = f.getName().replace("-plugin.jar", "");
			PluginsRegistered++;
		}
	}

}

Dioe Ausgabe ist folgende:

Plugin -> TCGOnline.resources/game.resources/yugioh-plugin.jar

Wie kann ich dieses jar nun starten / einlesen / wie auch immer?
 
Okay, habe es nun geschafft die Klassen aus den Jars zu laden, aber nun bleibt mir immernoch eine Frage offen.

Mein Interface: (Sowohl im TCGOnline.jat, als auch im yugioh-plugin.jar vohanden)

Java:
public interface LocalModule { 
    /* Start the module */ 
    void start(); 
}

Meine start.java aus dem Plugin: (TCGOnline.resources/game.resources/yugioh-plugin.jar)

Java:
public class start implements LocalModule {
	@Override
	public void start() {
		System.out.println("Plugin Loaded! ;)");
	}
}

Meine PluginSystem.java (TCGOnline.jar)

Java:
JarClassLoader jarLoader = new JarClassLoader(DEFINED.RESOURCE_DIR + "game.resources/" + string + "-plugin.jar");
try {
        Class c = jarLoader.loadClass("start", true);
        Object o = c.newInstance();
        ((LocalModule) o).start(); 
} catch (ClassNotFoundException e) {
	e.printStackTrace();
} catch (InstantiationException e) {
	e.printStackTrace();
} catch (IllegalAccessException e) {
	e.printStackTrace();
}

Das funktioniert soweit auch und in der Konsole taucht mein "Plugin Loaded! ;)" auf :)

Aber nun frage ich mich, wie ich aus der start.java auf Daten innerhalb des TCGOnline.jar zugreifen kann.

Ich habe überlegt es eventuell als Parameter in der start() Methode zu übergeben, aber es wärte mir natürlich lieber, wenn man die Klasse nicht irgendwie einbetten kann, in mein Script.

Jemand eine Ahnung, wie das geht oder was ich meine? xD
 
Zurück