[Javalist] Classloader anonymous gond

istvan.ketler at lhsystems.com istvan.ketler at lhsystems.com
2013. Ápr. 15., H, 19:20:28 CEST


Ez elég bonyolult, minden egyes pluginnak saján classloader-e van. Ez a classloader helper-ként megkapja azon pluginek classloader-ét, akiktől függ (mert azokat láthatja). Leszármazni meg egy olyanból származik le, aki látja az application lib-eket, illetve magát a framework-öt.

De nem ez a baj, a megfelelő classloader lép akcóba, csak rosszkor, hiszen belső osztályok csak a befogadó osztállyal együtt léteznek, a befogadó példányosítása környékén kéne nekik is példányosulniuk, de mivel ez csak egy metódus meghívása esetén példányosodna, ezért - talán egyfajta lazy loading miatt - csak a metódus meghívásakor tenné ezt. Ott meg ki tudja miért de nem hajlandó. A classloader resource-ként egyébként el is éri, csak class-ként betölteni nem akarja. Valami nagyon alap dolgot nézek be...

Üdv,

Iván
______________________________
István Ketler
Senior Consultant

Lufthansa Systems Hungária Kft.
GUI Service Center
Mobile Solutions Team, Development Center Danube
Neumann János u. 1/e
1117 Budapest
Hungary
Phone: +36 1 887-2815
Fax: +36 1 887-0577
Mobile: +36 30 600-4936
E-mail: istvan.ketler at LHsystems.com<mailto:istvan.ketler at LHsystems.com>
www.LHsystems.com<http://www.lhsystems.com/>

From: javalist-bounces at lists.javaforum.hu [mailto:javalist-bounces at lists.javaforum.hu] On Behalf Of Zsombor
Sent: Monday, April 15, 2013 6:53 PM
To: Java lista
Subject: Re: [Javalist] Classloader anonymous gond

Milyen class loadert használsz, amikor létrehozod az eredeti példányokat ? Azt kéne beállítani hiváskor mint a thread context classloadere ... szvsz.
Zs

2013/4/15 <istvan.ketler at lhsystems.com<mailto:istvan.ketler at lhsystems.com>>
Ezt a metódust hívom meg, és ennek a new ActionListener során hasal el:

       public void init() {
              setLayout(new BorderLayout());
              add(new JLabel("Fix label"), BorderLayout.NORTH);
              JButton button = new JButton("Add label");
              button.addActionListener(
                     new ActionListener() {
                           /**
                           * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
                           */
                           @Override
                           public void actionPerformed(final ActionEvent $e) {
                                  add(new JLabel("Dynamically added label"), BorderLayout.CENTER);
                                  revalidate();
                                  repaint();
                           }
                     }
              );
              add(button, BorderLayout.SOUTH);
       }

A meghívás a Jide docking és action framework-öt is használva így történik:

       public void actionPerformed(final ActionEvent $e) {
              LegEditorPlugin.getInstance().getLogger().logAction("Start legeditor action initiated.");
              LegEditorPlugin.getInstance().getViewController().setVisible(true);
       }

A ViewController mozgósítja a DockableFrame setVisible metódusát, amiben ez van:

                     synchronized (_initCalled) {
                           if (!_initCalled) {
                                  _associatedView.init();
                                  _initCalled = true;
                           }
                     }

A kivétel pedig azért jön, mert nincs betöltve a myClassName$1 osztály (az anonymous class), mire meghívja a classloader-emet, és ennek a findClass metódusa szomorodik el teljes joggal, hiszen ezt az osztályt csak a befogadó osztály példányával együtt lehetne példányosítani.

java.lang.reflect.InvocationTargetException
Caused by: java.lang.NoClassDefFoundError: com/lsyh/nlpgui/legeditor/view/LegEditorView$1
Caused by: java.lang.ClassNotFoundException: com.lsyh.nlpgui.legeditor.view.LegEditorView$1

Amikor a befogadó osztályt betöltöm, esetleg akkor kéne betölteni a benne lévő anonymous osztályokat is, de azt hogyan? Ugorjak neki a fájlrendszernek, keressem a $N végűeket?. Látszólag az URLClassLoader és felmenői semmi ilyesmit nem tesznek.

Üdv,

Iván
______________________________
István Ketler
Senior Consultant

Lufthansa Systems Hungária Kft.
GUI Service Center
Mobile Solutions Team, Development Center Danube
Neumann János u. 1/e
1117 Budapest
Hungary
Phone: +36 1 887-2815<tel:%2B36%201%C2%A0887-2815>
Fax: +36 1 887-0577<tel:%2B36%201%C2%A0887-0577>
Mobile: +36 30 600-4936<tel:%2B36%2030%C2%A0600-4936>
E-mail: istvan.ketler at LHsystems.com<mailto:istvan.ketler at LHsystems.com>
www.LHsystems.com<http://www.lhsystems.com/>


Sitz der Gesellschaft / Corporate Headquarters: Lufthansa Systems Hungaria Kft, Budapest, Fovarosi Birosag 01-09-463417
Geschaeftsfuehrung / Management Board: Peter Sipos

From: javalist-bounces at lists.javaforum.hu<mailto:javalist-bounces at lists.javaforum.hu> [mailto:javalist-bounces at lists.javaforum.hu<mailto:javalist-bounces at lists.javaforum.hu>] On Behalf Of Peter Verhas
Sent: Monday, April 15, 2013 5:30 PM
To: Java lista

Subject: Re: [Javalist] Classloader anonymous gond

Ha anonymous akkor hol adod meg a nevet ami nincs es mit?

On Monday, April 15, 2013, wrote:
Anonymous
Sent from my cellular

From: Peter Verhas [mailto:peter at verhas.com]
Sent: Monday, April 15, 2013 05:22 PM
To: Java lista <javalist at lists.javaforum.hu<mailto:javalist at lists.javaforum.hu>>
Subject: Re: [Javalist] Classloader anonymous gond

Abstract vagy anonymous?

On Monday, April 15, 2013, wrote:
Nem, a hivott metodus definial egy jbuttont amihez hozzaadok egy action lostenert

Ha a listener egy betoltheto osztaly akkor muxik es ha kell peldanyosit

Ha a listener egy anonymous osztaly akkor elhasal, nem tudja betolteni a name$1 osztalyt

Sent from my cellular

From: Peter Verhas [mailto:peter at verhas.com]
Sent: Monday, April 15, 2013 05:14 PM
To: Java lista <javalist at lists.javaforum.hu<mailto:javalist at lists.javaforum.hu>>
Subject: Re: [Javalist] Classloader anonymous gond

És ha jól értem akkor hasal el, amikor a metódus egy abstract osztályban van definiálva, amelyiket kiterjesztettél, és a kiterjesztett nem abstract osztályt adtad meg az XML-ben, mint példányosítandó osztályt, meg a metódust, amit az abstract-ból örökölt.

--
Dipl. Ing. Peter Verhas
peter at verhas.com<mailto:peter at verhas.com>
+41791542095<tel:%2B41791542095>
skype: verhas





On 2013.04.15., at 16:58, <istvan.ketler at lhsystems.com<mailto:istvan.ketler at lhsystems.com>> wrote:

Context

Frameworkot irok

Dinamikusan szedi ossze a plugineket

Xml-ben action-oket definial classname es metodusname megadasaval

Feluletre gombokat teszek ha megnyomjak akkor a korabban peldanyositott osztaly korabban letrehozott es eltarolt Method-jara adok ki egy invoke-ot

Thx
Ivan
Sent from my cellular



Sitz der Gesellschaft / Corporate Headquarters: Lufthansa Systems Hungaria Kft, Budapest, Fovarosi Birosag 01-09-463417
Geschaeftsfuehrung / Management Board: Peter Sipos

From: KETLER, ISTVAN
Sent: Monday, April 15, 2013 04:51 PM
To: 'javalist at lists.javaforum.hu<mailto:javalist at lists.javaforum.hu>' <javalist at lists.javaforum.hu<mailto:javalist at lists.javaforum.hu>>
Subject: Re: [Javalist] Classloader anonymous gond

Egy listenert allitok be egy abban a metodusban deklaralt buttonhoz

Sent from my cellular



--
Verhás Péter
ügyvezető
Verhás & Verhás Szoftver Manufaktúra Kft.
peter at verhas.com<mailto:peter at verhas.com>
t: +36(30)9306805<tel:%2B36%2830%299306805>
skype: verhas

_______________________________________________
Javalist mailing list
Javalist at lists.javaforum.hu<mailto:Javalist at lists.javaforum.hu>
http://lists.javaforum.hu/mailman/listinfo/javalist


 
Sitz der Gesellschaft / Corporate Headquarters: Lufthansa Systems Hungaria Kft, Budapest, Fovarosi Birosag 01-09-463417
Geschaeftsfuehrung / Management Board: Peter Sipos


--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20130415/37ba58e5/attachment.html>


További információk a(z) Javalist levelezőlistáról