[java] ClassLoader probleem

Pagina: 1
Acties:

  • aghos
  • Registratie: Juni 2005
  • Laatst online: 08-01 15:59
Voor een IRCbot geschreven in java probeer ik dynamische klasses te laden ( dit voor kleine scriptjes toe te voegen zonder de bot down te halen te hercompileren en van die dinges )

Ik probeer om de naam van een classe in een txt file te zetten en dit dan te laten uitlezen en dan te laden in een classLoader.
( ik heb toch de indruk dat dit zo zou moeten maar kan hier dus al fout gaan )

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
    public void loadClasses() {
        try {
            FileReader f = new FileReader ("loadClasses.txt");
            BufferedReader br = new BufferedReader (f);   
            String lijn = br.readLine();      
                for (int i=0; (!lijn.equals("stop") || (lijn == null)); i++){
                    Object a = this.getClass().getClassLoader().loadClass(lijn);
                    System.out.println(lijn);
                    BI = (BotInterface) a;
                    BI.setBot();
                    System.out.println("test:" +BI);
                    lijn = br.readLine();               
                }
            }    
        catch (Exception e){ 
            }   
    }

public interface BotInterface {
  public void setBot();
}

public class QouteExt implements BotInterface {

private BotHandler b;

    public void setBot() {
        System.out.println("jeeeej it works");
    }
    
    public String toString() {
        return "QouteExt";
    }
    
}
 


dit blijkt echter niet te werken

ik krijg geen Errors maar de System.out.println("test"+BI); doet hij gewoon niet terwijl de rest van mijn Ircbot wel gewoon verder loopt.
ook is de output van het object A : class QouteExt
(in de txt file staat ook de class QouteExt)
nu ben ik al een paar uurtjes aan het googlen maar dit zonder veel succes.

Mocht ik een volledig verkeerde denkwijze hebben zou ik dit natuurlijk graag willen weten.

[ Voor 11% gewijzigd door aghos op 04-05-2006 20:37 ]


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 18-02 10:22

NetForce1

(inspiratie == 0) -> true

Ik zou om te beginnen die exceptie ergens naartoe loggen, bijv. via e.printStackTrace().
Ik denk overigens dat je een ClassCastException krijgt. ClassLoader.loadClass() levert nl een Class object op. Je moet hier nog newInstance() op aanroepen om een instantie aan te maken.

[ Voor 52% gewijzigd door NetForce1 op 04-05-2006 20:43 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • aghos
  • Registratie: Juni 2005
  • Laatst online: 08-01 15:59
ach dom van mij

krijg dus :

java.lang.ClassCastException
at BotHandler.loadClasses(BotHandler.java:50)
at BotHandler.<init>(BotHandler.java:38)
at Alzeria.main(Alzeria.java:11)

doe dus duidelijk iets verkeerd.

zal nog ff verder zoeken

  • aghos
  • Registratie: Juni 2005
  • Laatst online: 08-01 15:59
dank je netforce1 ;) .newInstance() heeft het opgelost

[ Voor 45% gewijzigd door aghos op 04-05-2006 21:10 ]