... udělat DVA jar soubory? Petr Zajíc
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Ján Valkovič Sent: Tuesday, June 12, 2007 2:41 PM To: Java Subject: ClassCastException vs ClassLoader Ahoj, mam Swing aplikaciu a potrebujem z nej tlacit, vyriesil som to tak, ze kazda tlacova zostava bude JPanel(JXPanel) a bude zabaleny v jar, pri nacitavani sa zobrazi v tlacovom dialogu, jar bude mat v sebe samotny report, potrebne kniznice a konfiguracny panel (datum od-do, zakaznik a pod., kvoli vyfiltrovaniu zaznamov, ktore budem tlacit), modul by som chcel urobit natolko samostatny, aby sa vedel pustit a tlacit, ak by tam bol main. Cize ked treba nova zostava, tak urobim modul, nakopirujem do adreara reports a pridam ju do suboru reports.xml a to je cele, pri dalsom otvoreni tlacoveho formulara sa objavi v zozname reportov. Hlavny program o tlaci nebude mat ani sajnu, celu tlac bude robit modul. Tym padom dokazem urobit lubovolnu tlacovu zostavu, pouzit reporting engine a nemusim pri tom robit zasahy do hlavneho programu (som si isty, ze po case pride poziadavka, ktorej sa nebude dat vyhoviet ani s touto architekturou, ale aspon to oddialim :-) ) V hlavnej aplikacii pouzivam URLClassLoader a ked to pustam z eclipse, tak sa modul nacita, ked urobim jar (pouzivam Fat JAR), tak pri nacitavani modulu zahlasi toto: Message: java.lang.ClassCastException: org.jdesktop.swingx.plaf.PainterUIResource cannot be cast to org.jdesktop.swingx.painter.Painter Level: SEVERE Stack Trace: org.jdesktop.swingx.plaf.PainterUIResource cannot be cast to org.jdesktop.swingx.painter.Painter org.jdesktop.swingx.plaf.basic.BasicTitledPanelUI.installUI(BasicTitledPanel UI.java:123) javax.swing.JComponent.setUI(Unknown Source) javax.swing.JPanel.setUI(Unknown Source) org.jdesktop.swingx.JXTitledPanel.setUI(JXTitledPanel.java:149) org.jdesktop.swingx.JXTitledPanel.updateUI(JXTitledPanel.java:176) javax.swing.JPanel.<init>(Unknown Source) javax.swing.JPanel.<init>(Unknown Source) javax.swing.JPanel.<init>(Unknown Source) org.jdesktop.swingx.JXPanel.<init>(JXPanel.java:83) org.jdesktop.swingx.JXTitledPanel.<init>(JXTitledPanel.java:121) org.jdesktop.swingx.JXTitledPanel.<init>(JXTitledPanel.java:111) org.jdesktop.swingx.JXTitledPanel.<init>(JXTitledPanel.java:101) org.eltik.planovanie.reports.prehlad1.ReportPanel.getPanelObdobie(ReportPane l.java:183) org.eltik.planovanie.reports.prehlad1.ReportPanel.getPanelFilter(ReportPanel .java:126) org.eltik.planovanie.reports.prehlad1.ReportPanel.initialize(ReportPanel.jav a:90) org.eltik.planovanie.reports.prehlad1.ReportPanel.<init>(ReportPanel.java:79 ) org.eltik.planovanie.reports.prehlad1.ReportMain.getReport(ReportMain.java:5 1) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.eltik.planovanie.PrintDialog$4.run(PrintDialog.java:329) java.lang.Thread.run(Unknown Source) org.jdesktop.swingx.painter.Painter je interface a org.jdesktop.swingx.plaf.PainterUIResource ho implementuje Problem moze byt v tom, ze Fat JAR pouziva One-JAR ( http://one-jar.sourceforge.net/ ) a ten ma vlastny ClassLoader a na nacitanie modulu pouzivam URLClassLoader. Ked na nacitanie modulu pouzijem JarClassLoader z One-JAR, tak sa neviem dostat ku xml, v ktorom je report (jFreeReport), lebo modul sam seba nevidi, aj ked vsetko funguje :-) S Javou nemam este vela skusenosti, takze mozno nieco robim zle (dufam, to sa da napravit, ak nie je problem medzi stolickou a klavesnicou, tak sa to bude riesit tazsie :-) ) Jedno z rieseni je urobit workaround, modul otvori jar, z ktoreho je spusteny, vykopiruje von co potrebuje, pouzije a ak sa nic nestane, tak po sebe aj uprace, ale toto riesenie mi pripada dost pritiahnute za vlasy :-) Vedel by mi niekto nieco poradit alebo navrhnut a prijimam ak kritiku, vdaka ya
