java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Allgemeine Java-Themen

Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 12.03.2006, 14:01   #1 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 11.03.2006
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Klasse aus externer Class in JAR laden

Servus!

Ich habe gleich mehrere Probleme:

1: Wie kreig ich den Pfad der JAR-Datei raus, die ich gerade ausführe?
2: Wie kann ich aus einer JAR-Datei heraus (und/oder einfach aus *.class-Datei) eine Klasse laden, die sich in ein einem anderen Ordner befindet (z.B. in [Ordner_durch_1:_rausgekriegt]\module) und dann mit ihnen arbeiten?
3: Wie kann ich nun, wenn die durch 2: geladen Klasse abgeleitet von einem JPanel, auf dem sich noch andere Komponenten befinden und mit denen ich arbeiten kann, ist, dieses Panel auf mein Formular aus der Haupt-Klasse (in JAR) bringen. (eine Instanz der Klasse bilden und dann einfach add zu irgendeinem anderen Panel funzt nicht ... selbst wenn die Klasse mit direkt im JAR ist)

Wie man schon sieht, will ich ein Programm bastel, das aus einem nicht viel tuenden Haptprogramm besteht und das beim Start den Ordner "module" noch andern *.class und/oder *.jar-Dateien, die alle irgendwie so sind, dass ich sie dann einfach in z.b. jede in ein JTabbedPane laden kann und damit arbeiten kann, durchsucht und lädt.

Geht das überhaupt (bestimmt!) und gibt es vielleicht einfachere und bessere Methoden dazu?

Ich hoffe, Ihr könnt mir hier helfen!

mfg, eyeless
eyeless ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 13.03.2006, 22:04   #2 (permalink)
Neuer Benutzer
byte
Themenstarter
 
Registriert seit: 11.03.2006
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Kann mir de echt keiner weiterhelfen?

mfg, eyeless
eyeless ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 13.03.2006, 22:30   #3 (permalink)
Premium-Benutzer
 
Benutzerbild von Beni
 
Registriert seit: 07.02.2004
Fachbeiträge: 7.817
Abgegebene Danke: 10
Erhielt 152 Danke für 74 Beiträge
1. Da es überhaubt keine Garantie gibt, dass dein Programm überhaupt aus einer JAR ausgeführt wird... ich wüsste nicht wie. Vielleicht über den ClassLoader?
2. Mit einem URLClassLoader kannst du die Klassen laden, "Class"-Objekte herstellen und schliesslich Instanzen anlegen.
3. Ich verstehe rein sprachlich nicht ganz, wie das jetzt funktionieren soll...

Ein Plugin-Mechanismus kannst du folgendermassen machen: ein Interface "Plugin" in deinem Hauptprogramm. Die Plugins kommen je in eine JAR-Datei, in dem Manifest wird die Haupt-Plugin-Klasse angegeben. Dann lädt man das Plugin mit einem URLClassLoader, instanziiert die Haupt-Plugin-Klasse (welche das Interface "Plugin" implementiert haben muss!), macht noch einen kleinen Cast von "Object" auf "Plugin" - und dann kann man nach herzenslust irgendwelche selbst definierten Methoden aufrufen.
__________________
dock.javaforge.com

Byte-Welt
Beni ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 13.03.2006, 22:34   #4 (permalink)
Premium-Benutzer
 
Registriert seit: 23.02.2004
Fachbeiträge: 4.725
Abgegebene Danke: 0
Erhielt 91 Danke für 78 Beiträge
1. http://www.java-forum.org/de/viewtop...classutilities
__________________
Sorry I don't know what you just said because I was thinking about Batman.
Illuvatar ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 14.03.2006, 10:21   #5 (permalink)
Neuer Benutzer
byte
Themenstarter
 
Registriert seit: 11.03.2006
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Hallo,

3. meine ich ungefähr so:

Ich habe nun per ClassLoader diese externe .class in die VM geladen und eine Instanz davon erstellt:
Java:

Code:
public class Test3Panel extends javax.swing.JPanel {
   
    /** Creates new form Test3Panel */
    public Test3Panel() {
        initComponents();
    }
   
    private void initComponents() {
        jProgressBar1 = new javax.swing.JProgressBar();

    jProgressBar1.setValue(50);   
    add(jProgressBar1);

    }
   
    private javax.swing.JProgressBar jProgressBar1;
   
}
So, und nun möchte ich dieses Panel irgendwie auf meinen Frame bringen, am besten in ein schon vorhandenes Panel ... wie geht das?


Hat vieleicht jemand ein Beispiel, wie das mit den Interface "Plugin" funktioniert?

mfg, eyeless
eyeless ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.03.2006, 16:14   #6 (permalink)
Neuer Benutzer
byte
Themenstarter
 
Registriert seit: 11.03.2006
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
jemnd eine idee, wie es gehen könnte?

mfg, eyeless
eyeless ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 19.03.2006, 22:48   #7 (permalink)
Neuer Benutzer
byte
Themenstarter
 
Registriert seit: 11.03.2006
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
So, hab mich nur vertan, inzwischen funktioniert alles (fast) super.

Ein Problem ist aber noch:

Zur Zeit habe ich die Klassen auch als solche, also als *.class dastehen, mit entsprechenden Ordnern für Bilder und so und Packages, also eigentlich auch nur Unterordner, wo noch andere Klassen drinne sind.
So habe ich zum Bsp. die HauktKlasse im Ordner "base", Bilder für die HauptKlasse in "base/img" und extra Klassen für das HauptKlasse in "base/misc" (package base.misc)
Nun habe ich Module, einfach Klassen, die von JPanel abgeleitet sind, im Ordner "modules/{$ModulName}" (auch package "modules.{$ModulName}"), die ich dann einfach per Laufzeit mit Class.forName, Interfaces und so weiter einbinde, und in ein JTabbedPane auf dem HauptFormular reinstecke.
Das funkktioniert allerdings nur solange, wie ich alles nicht in JARS packe.
Wenn ich nun aber die ganzen Sachen für die HauptKlasse in eine JAR Packe (z.B. "Prog.jar"), sich im ProgrammOrdner also nur noch die Prog.jar und der Ordner "modules", funktionier es nicht mehr, wenn ich z.B. Class.forName("modules.dummy.mod") mache, obwohl ein Ordner dummy in modules existiert und in dummy die Klasse "mod.class" mit package "modules.dummy.mod".
Da kommt einfach eeine ClassNotFoundException.

Also: wie kann ich nun diese Klasse aus der JAR-Datei heraus laden?

Muss ich dazu irgendwie den CLASSPATH in MANIFEST.MF im JAR um "./modules" erweitern?

Ich habe es auch schon hiermit probiert:

Java:

Code:
public Class findClass(String name) throws ClassNotFoundException {
  // Dieses Array nimmt den Bytecode auf.
  byte[] byteCode = null;
  // Zusammensetzen des Dateinamens
  String fileName = name.replace('.', File.separatorChar)+"."+CRYPT_EXT;
  try {
    // Entschlüsseln der Datei und Einlesen des Bytecodes
    byteCode = decryptFile(fileName);
  }
  catch(IOException e) {
    throw new ClassNotFoundException("Encrytepd class "
                                     +name+" not found.", e);
  }
  // Klasse in der VM erzeugen und Class-Objekt zurückliefern
  Class c = defineClass(name, byteCode, 0, byteCode.length);
  return c;
}

Allerdings sagt der Compiler mir immer, es gäbe "defineClass()", "decryptClass" und "CRYPT_EXT" nicht, obwohl ich "java.lang.ClassLoader" und "javax.crypto.*" importiert habe ... oer muss ich nochwas importieren?

Ein weiteres Problem wäre noch, was muss ich ändern, wenn ich nun eine ganze JAR-Datei laden will?

mfg, eyeless
eyeless ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
konstruktor aus externer klasse aufrufen stefan2801 Java Basics - Anfänger-Themen 1 04.10.2008 18:05
Klasse in externer JAR mit ObjectInputStream The_S Allgemeine Java-Themen 14 11.06.2008 12:49
TimerTask auf externer class Kawia Java Basics - Anfänger-Themen 0 22.11.2007 23:26
JInternalFrame aus externer Klasse JavaPain Java Basics - Anfänger-Themen 0 16.02.2005 17:35
XML von externer Domain laden Dan Für Verirrte - Fragen zu JavaScript 1 09.09.2004 08:29


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de