[java] LinkageError bij dynamisch classes laden

Pagina: 1
Acties:

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Hallo,

Ik zit met een probleem waar ik niet echt uitkom.

Het gaat over een systeem dat dynamisch classes load bij het opstarten (plugins).
Nou werkt dat wel en laadt hij FakePlugin wel goed. Maar zodra ik in de innerclass
svop.addFrameToDesktop(gui); uitvoer krijg ik een Linkage error, Class FakePlugin violates loader constraints.

Hoe kan dit nou, bij de variable svop moet die innerclass toch gewoon bij kunnen?
en svop kan je wel goed benaderen van uit FakePlugin zelf. Daarnaast als ik de innerclass private maak krijg ik ook weer een linkage error :(.

Als ik svop meegeef aan de constructor van de innerclass is er niets aan de hand, maar dat wil ik dus niet.

Heb alleen de relevante methoden hier gepost.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class FakePlugin implements Plugin{

protected Svop svop;
    
    public void init(Svop svop){
        this.svop = svop;
        svop.addMenuToDesktop(getMenu());
        Logger.printDebug("init");
    }

                protected class FakeAction extends AbstractAction{
                   public FakeAction(){
               super("Fake item");
           }
    
           public void actionPerformed(ActionEvent e){
               FakePluginGui gui = new FakePluginGui();
               gui.setSize(200,200);
               gui.setVisible(true);
               svop.addFrameToDesktop(gui);
              }
       }
}

[ Voor 6% gewijzigd door eppie op 08-12-2004 13:55 ]


  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Niemand een idee??

Verwijderd

De foutmelding is niet een erg handige van java (Daar is de VM ook berucht om.)

Een van de dingen die je kan doen is met een tooltje "FileMon" kijken of er bestanden niet gevonden worden. Het kan zijn dat een classpath niet goed staat. Verder zou ik goed kijken of je via de accessor levels wel toegang hebt op de juiste methods. Test dit door even alle methods en fields public te maken. Het lijkt er op (Je code voorbeeld is te summier om er iets zinnigs over te zeggen) dat je de method niet kan benaderen door scope en accessor issues.

  • oddy
  • Registratie: December 2004
  • Laatst online: 12-05 12:37
Als je hier geen antwoord krijgt, kan je altijd eens gaan zien op www.sitemasters.be

Zeer goede site voor alles wat met programmeren te maken heeft.
:)

Sam

EDIT: Een minuutje na het eerste antwoord ;)

[ Voor 13% gewijzigd door oddy op 09-12-2004 08:32 ]


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Mijn ide geeft een waarschuwing "Unqualified access to the field svop" als ik deze code erin stop.
Waarom svop niet meegeven in de constructor van de inner class?

[ Voor 8% gewijzigd door Gert op 09-12-2004 08:59 ]


  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
De files worden wel goed ingelezen en geladen. En als ik de fields public maak kan ik er idd wel bij maar dat lijkt me nou niet zo netjes :) Het idee achter een innerclass is toch juist dat je bij de variablen van de class kan waar hij instaat? En ook als ik hem meegeef aan de constructor kan ik er wel bij.

Bij het dynamisch laden van deze class moet ik ook al de innerclass public of protected maken ipv private ander kan hij hem helemaal niet laden en gooit hij met een IlligalAccessError.

Terwijl ik ook classes hebben die meteen geladen worden bij het opstarten, dus niet dynamisch, die wel private innerclasses hebben en wel bij de variablen kunnen.

[ Voor 99% gewijzigd door eppie op 09-12-2004 09:19 ]


Verwijderd

eppie schreef op donderdag 09 december 2004 @ 09:04:
De files worden wel goed ingelezen en geladen. En als ik de fields public maak kan ik er idd wel bij maar dat lijkt me nou niet zo netjes :) Het idee achter een innerclass is toch juist dat je bij de variablen van de class kan waar hij instaat? En ook als ik hem meegeef aan de constructor kan ik er wel bij.
:) De vraag om je fields public te maken was om te checken of je problemen een accessor level issue waren en dat waren ze. Wat je kan proberen is de Svop variabel een default accessor level te geven (declaratie zonder public/ private of protected keyword) Hiermee limiteer je de accesss maar kan een class hem binnen het package toch benaderen.

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Ik heb het is geprobeerd maar krijg nog steeds dezelfde exception :(

Dan maar public innerclass en variablen meegeven aan de constructor maar mooi is anders :( Iig bedankt voor de hulp en als iemand toch nog een idee heeft gooi het hier neer :)
Pagina: 1