Ich schreibe fürm privaten Einsatz einen Server und ein signiertes Applet. Das Applet bekommt vom Server ein Jar-File als serialisiertes byte-Array. Das Applet cached es auf die HDD und soll es dann von dort per URLClassLoader geladen werden. Die benötigten Klassen werden aus der Manifest gelesen, da es Klassen gibt die auf dem Applet-Clienten, dem Server und anderen Clienten die ein zusätzliches Programm, welches ich erst später schreibe laufen sollen.
Der MD5-Fingerprint am Clienten ist mit dem am Server ident, es ist zum Debugen auch eine Main in der Jar eingetragen, und direkt starten geht problemlos. Der Klassenpfad stimmt natürlich auch.
Ich hoffe ihr könnt mir helfen, ich finde absolut nichts brauchbares darüber.
Der MD5-Fingerprint am Clienten ist mit dem am Server ident, es ist zum Debugen auch eine Main in der Jar eingetragen, und direkt starten geht problemlos. Der Klassenpfad stimmt natürlich auch.
Java:
public Plugin(File f) throws InstantiationError, ZipException, IOException
{
ZipFile zipFile = new ZipFile(f);
InputStream inputStream = zipFile.getInputStream(META_INF);
Pattern pattern = Pattern.compile("=");
URLClassLoader classLoader = new URLClassLoader(new URL[] {
f.toURI().toURL()
});
for(String line = null; (line = readLine(inputStream)) != null;)
{
if(line.contains("="))
{
String[] splittedLine = pattern.split(line, 0);
if(splittedLine.length == 2)
{
if(splittedLine[0].equalsIgnoreCase("menuitemtext"))
menuItemText = splittedLine[1];
else if(splittedLine[0].equalsIgnoreCase("mainpanel"))
{
String panelPath = splittedLine[1];
try
{
mainPanel = (JPanel) classLoader.loadClass(panelPath).newInstance();
}
catch (Throwable t)
{
t.printStackTrace();
throw new InstantiationError();
}
}
}
}
}
}
Code:
java.lang.ClassNotFoundException: pak.MainPanel
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at core.loginScreen.kernel.Plugin.<init>(Plugin.java:49)
at core.loginScreen.kernel.LoadPluginsFromTemp.load(LoadPluginsFromTemp.java:28)
at core.loginScreen.kernel.CreateKernel.create(CreateKernel.java:15)
at core.loginScreen.LoginButton.run(LoginButton.java:68)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Unknown Source)
at java.util.jar.Manifest.read(Unknown Source)
at java.util.jar.Manifest.<init>(Unknown Source)
at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
at java.util.jar.JarFile.getManifest(Unknown Source)
at sun.misc.URLClassPath$JarLoader$2.getManifest(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
... 10 more
Exception in thread "LoginButton" java.lang.InstantiationError
at core.loginScreen.kernel.Plugin.<init>(Plugin.java:54)
at core.loginScreen.kernel.LoadPluginsFromTemp.load(LoadPluginsFromTemp.java:28)
at core.loginScreen.kernel.CreateKernel.create(CreateKernel.java:15)
at core.loginScreen.LoginButton.run(LoginButton.java:68)
at java.lang.Thread.run(Unknown Source)
Ich hoffe ihr könnt mir helfen, ich finde absolut nichts brauchbares darüber.