Avatar billede a-torsten Nybegynder
10. april 2002 - 12:08 Der er 9 kommentarer og
1 løsning

Hente jar-fil direkte ind i koden....

Hejsa...

Jeg har en kode og en jar-fil (Med LookAndFeel indhold)...

Kan jeg ikke hente den jar-fil direkte ind i min jave-kode uden at skulle tilføle classpath osv...

Jeg har kigget på http://mlf.sourceforge.net/Phorum/read.php?f=1&i=16&t=16 men kan ikke få det til at virke...

-Anders
Avatar billede quaid Nybegynder
10. april 2002 - 12:14 #1
Inkluder classpathen når du kører programmet.
QD::
Avatar billede a-torsten Nybegynder
10. april 2002 - 12:17 #2
How...

Hvis min fil hedder

C:\gui\minjar.jar ??

-Anders
Avatar billede quaid Nybegynder
10. april 2002 - 12:21 #3
Et eksempel er her at jeg skal bruge en jar fil til at køre et program.
c:\j2sdk1.4.0\bin\java -cp c:\j2sdk1.4.0\jre\lib\comm.jar;. GUI_EAS_Driver

Dette vil så i dos prompt medtage comm.jar
Du kan evt lave en bat til at køre det
QD::
Avatar billede a-torsten Nybegynder
10. april 2002 - 12:24 #4
Kan man ikke få den til at inkludere direkte fra filen...

Noget classloader måske..

-Anders
Avatar billede disky Nybegynder
10. april 2002 - 12:42 #5
Du kan godt bruge classloaderen til dynamisk at instantiere klassen, men for at JVM'en kan finde klassen skal den være et sted som er nævnt i classpath.
Avatar billede a-torsten Nybegynder
10. april 2002 - 12:44 #6
Kan du ikke komme med et eksempel der dynamiske inkludere c:\a\a.jar ??

-Anders
Avatar billede disky Nybegynder
10. april 2002 - 13:27 #7
du kan ikke inkludere en hel jar fil, du skal instantiere de enkelte klasses inden i jar filer hver for sig.

Du bruger classloaderen f.eks. sådanne:

import java.net.*;
public class Test
{
public static void main( String args[] )
{
  try
  {
  ClassLoader loader = new URLClassLoader( new URL[] { new URL( "file:c:\\a\\a.jar" )});
  Class loadedClass = loader.loadClass("UserDefinedClass");

  UserDefinedAbstractClass newClass = (UserDefinedAbstractClass) loadedClass.newInstance();

  newClass.minFixeMetoder();  //Her kaldes en metode i den dynamisk loadede klasse
  }
  catch ( Exception e )
  {
  e.printStackTrace();
  }
}
}
Avatar billede a-torsten Nybegynder
10. april 2002 - 13:51 #8
C:\GUI\Test.java:11: cannot resolve symbol
symbol  : class UserDefinedAbstractClass 
location: class Test
  UserDefinedAbstractClass newClass = (UserDefinedAbstractClass) loadedClass.newInstance();
  ^
C:\GUI\Test.java:11: cannot resolve symbol
symbol  : class UserDefinedAbstractClass 
location: class Test
  UserDefinedAbstractClass newClass = (UserDefinedAbstractClass) loadedClass.newInstance();
Avatar billede disky Nybegynder
10. april 2002 - 13:59 #9
Det er klart nok.

DU kan jo ikke compile koden uden at du har java eller class filerne til den dynamisk loadede klasse

dette her kan compile:


import java.net.*;



public class test
{
public static void main( String args[] )
{
  try
  {
  ClassLoader loader = new URLClassLoader( new URL[] { new URL( "file:c:\\a\\a.jar" )});
  Class loadedClass = loader.loadClass("UserDefinedClass");

  Object newClass = loadedClass.newInstance();

//  newClass.minFixeMetoder();  //Her kaldes en metode i den dynamisk loadede klasse
  }
  catch ( Exception e )
  {
  e.printStackTrace();
  }
}
}


i denne linie:
  Object newClass = loadedClass.newInstance();

Skal du dog normalt typecaste til et object af den type du har brug for.
Avatar billede a-torsten Nybegynder
10. april 2002 - 14:14 #10
Takker.... Det hjalp...
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