Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Java] probleem met dynamic class loading

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een programma dat zichzelf kan uitbreiden. Dat wil zeggen als ik een nieuwe .class file in een directory zet dat hij dit commando dan kent (het command pattern).

Ik heb 1 commando gemaakt 1 interface gemaakt en een main applicatie

Interface Commando.java
code:
1
2
3
4
5
6
package server.commands;

public interface Commando
{
   public void run();
}


Het commando Echo.java

code:
1
2
3
4
5
6
7
8
9
package server.commands

public abstract class Echo implements Commando
{
   public void run()
   {
      System.out.println("test");
   }
}


main applicatie Serv.java

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package server;

public class Serv
{
  public static void main(String args[]) throws InstantiationException, IllegalAccesException,ClassNotFoundException
{

String test = "server.commands.Echo";
try
{
  Commando exec = (Commando)Class.forName(test).newInstance();
}
catch(InstantiationException s)
{
 System.out.println("" + s.getMessage());
}
}
}


Als ik Commando exec uit main in een try catch zet (zoals nu) dan krijg ik als foutmelding null.
Als ik try catch weg haal krijg ik de foutmelding

Exception in thread "main"java.lang.instantiationException
at sun.reflect.InstantiationExceptionConstructorAccorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.class.newInstance0(Unknown Source)
at java.lang.class.newInstance(Unknown Source)
at server.Serv.main(Serv.java51)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Waarschijnlijk kan de classloader jouw nieuwe class niet vinden. En dat is de reden dat je deze foutmelding krijgt.

Verwijderd

Topicstarter
Nee, want toen ik dat teste door de class Echox te noemen kreeg ik de ClassNotFoundException dus hij vind het wel.

Inmiddels werkt het:D

in me interface heb ik public abstract class veranderd naar public class en nu werkt het:D

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Van een abstracte class kun je geen instanties creeeren.

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Feyd-Rautha schreef op zaterdag 13 oktober 2007 @ 10:53:
Van een abstracte class kun je geen instanties creeeren.
Was het niet zo dat je wel van abstracte klassen een instantie kunt creeeren, maar niet van interfaces? Aangezien een klasse al abstract is als hij 1 abstracte methode bevat. Die kun je naar mijn wetens nog wel instantieren ;)

Verwijderd

Enfer schreef op zaterdag 13 oktober 2007 @ 12:00:

Was het niet zo dat je wel van abstracte klassen een instantie kunt creeeren, maar niet van interfaces? Aangezien een klasse al abstract is als hij 1 abstracte methode bevat. Die kun je naar mijn wetens nog wel instantieren ;)
Je kunt een abstracte klasse toch echt niet instantiëren. Wat wel kan is een afgeleide klasse instantiëren.

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Inderdaad. Verwijder 'abstract' van class Echo en dan kun je het instantieren. Of extend deze op z'n beurt weer naar een non-abstracte klasse.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd zoals hierboven al gezegd. Een abstracte klasse kun je niet instantieren. Een abstracte klasse is tenslotte nog niet "af".

Een interface is in feite gewoon een 100% abstracte class.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
rwb schreef op zaterdag 13 oktober 2007 @ 14:15:

Een interface is in feite gewoon een 100% abstracte class.
Of een abstracte class is een interface met fields en eventueel geimplementeerde klassen, :+.

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:29

Haan

dotnetter

Een interface kan ook fields bevatten ;)

Kater? Eerst water, de rest komt later


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 15:11
Haan schreef op zaterdag 13 oktober 2007 @ 22:13:
Een interface kan ook fields bevatten ;)
Dat zou dan het zelfde zijn als een abstracte klasse met static final fields. Daarnaast kan een abstracte klasse instance fields hebben wordt bedoeld denk ik.. :)

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)

Pagina: 1