Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java .jar lataus ongelma

johan123 [10.02.2006 22:52:54]

#

En ole ennen .jar tiedostoja koittanut kutsua koodin kautta, joten ei ihme että ei onnistunut. Voisiko joku auttaa, koitan tässä kutsua oman laskimen main(String[] Args) metodia, mutta huonolla onnella: Tässä on koodi jonka kirjoitin (ja ei siis toimi):

String clsName = "javacalculator.Main";
        Class cls = null;
        try {
            cls = Class.forName(clsName);
        } catch (ClassNotFoundException e) {
            Log.error_log(e, settings);
        }
        try{
            Method[] m = cls.getMethods();
            for (int i = 0; i<m.length; i++){
                if (m[i].getName().equals("main"))
                    m[i].invoke(null);
            }
            //Method m =cls.getMethod("main");
            //m.invoke(this, null);
        }catch (Exception e){
            Log.error_log(e, settings);
        }

Tuossa kohdassa invoke se heittää java.lang.IllegalArgumentException: wrong number of arguments virheen, mutta koitin antaa sille String[] ja heitti saman, dokumtaation mukaan staatisille metoodeille voi antaa null, ja pitäis toimia hyvin, varmaan jotain mitä en ole yhtään tajunut nyt...

FooBat [11.02.2006 03:21:20]

#

Kuten virhe sanoo, kutsut main-metodia väärällä määrällä argumetteja (nolla). Jos haluat kutsua main:ia null-argumentilla pitää invoke-metodille antaa parametriksi taulukko, jonka ensimmäinen (ja ainoa) alkio on null.

m[i].invoke(this, new Object[]{null});

Tuo ensimmäinen this voi olla null, jos kutsut metodia staattisesta metodista.


Mutta miten tämä ongelma liittyy jar-paketeista lataamiseen? Onko sinulla jokin hyvä syy käyttää dynaamista luokanlatausta vai etkö vain tiedä, että voit yhtähelposti kutsua omien luokkiesi metodeja jar-pakettien sisältä kuin normaalistikin, kunhan vain lisää jar-paketin classpath:iin.

javacalculator.Main.main(null);

johan123 [11.02.2006 12:15:33]

#

kunhan vain kokeilen, ei siihen mitään syytä ole...
kiitos

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta