Avatar billede tl Nybegynder
23. november 2003 - 16:27 Der er 5 kommentarer og
1 løsning

dynamisk loade en Java applikation.

Hej..

Er der nogen der ved om det er muligt at dynamisk loade en hel applikation i Java.

Dvs. jeg har en moder Java applikation som programmatisk kan starte en anden op? er det noget man kan i refleksion f.eks.
Avatar billede arne_v Ekspert
23. november 2003 - 16:29 #1
Du kan lave classloading og loade kode og køre det i samme JVM.

Du kan bruge Runtime.getRuntime().exec() til at køre det med
i en separat JVM.
Avatar billede tl Nybegynder
23. november 2003 - 16:36 #2
Takker!

ok... findes der mon et eksempel et sted...
Avatar billede arne_v Ekspert
23. november 2003 - 16:36 #3
Den her illusterer faktisk *begge* teknikker:

import java.io.*;
import java.net.*;

public class DoubleDynmaic {
  private static void dynno(int n) {
      (new File("test")).mkdir();
      try {
        OutputStream os = new FileOutputStream("test/Test.java");
        PrintStream ps = new PrintStream(os);
        ps.println("public class Test {");
        ps.println("  public Test() {");
        ps.println("      System.out.println(" + n + ");");
        ps.println("  }");
        ps.println("}");
        ps.close();
        os.close();
        Runtime.getRuntime().exec("javac -d test test/Test.java").waitFor();
        URL[] url = new URL[1];
        url[0] = new URL("file:test/");
        URLClassLoader cl = new URLClassLoader(url);
        Class.forName("Test", true, cl).newInstance();
      } catch (Exception e) {
        e.printStackTrace();
      }
  }
  public static void main(String[] args) {
      for(int i = 0; i < 10; i++) {
        dynno(i);
      }
  }
}
Avatar billede tl Nybegynder
29. november 2003 - 07:05 #4
Ok, nu er det sådan at den kode kan ikke umidelbart køre - man får en java.io.IOException: CreateProcess: javac -d test test/Test.java error=2
        at java.lang.Win32Process.create(Native Method)
        at java.lang.Win32Process.<init>(Win32Process.java:66)
        at java.lan

men ville man kunne kommunikere på tværs af en JVM til en anden med messages?
Avatar billede arne_v Ekspert
29. november 2003 - 11:15 #5
Fejlen skyldes formentlig bare at javac ikke er i PATH'en.
Avatar billede arne_v Ekspert
29. november 2003 - 11:16 #6
class loading loader ind i samme JVM.

exec starter en ny JVM. Den kunne princiielt godt snakke med den process
der har startet den via f.eks. Sockets.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester