Avatar billede nidyahou Praktikant
16. november 2009 - 18:57 Der er 19 kommentarer og
1 løsning

Python - importer java

Jeg er interesseret i at importere en 2 java .class filer, og bruge metoderne i python-scripts. Er det muligt?

NB: java .class filerne skal importeres EFTER python scriptet er initialiseret, fordi jeg bruger en metode i python scriptet til at bestemme hvilke 2 .class filer der skal loades.

pfh. tak
Avatar billede arne_v Ekspert
16. november 2009 - 19:04 #1
Jeg antager at du bruger Jython.

Det boer vel ikke vaere noget problem.

Jeg vil da tror at helt almindelig Class forName newInstance virker.
Avatar billede arne_v Ekspert
16. november 2009 - 19:08 #2
Jep.

public class Foobar {
    public void m() {
        System.out.println("Det virker");
    }
}

og:

from java.lang import Class
o = Class.forName("Foobar").newInstance()
o.m()
Avatar billede nidyahou Praktikant
16. november 2009 - 19:14 #3
hov - jeg tror jeg glemte det mest centrale punkt som er at class filerne skal hentes fra forskellige steder på nettet. hvordan stater jeg det i from?
Avatar billede nidyahou Praktikant
16. november 2009 - 19:17 #4
altså er det muligt at bruge direkte eller skal der kodes en sekvens som dl'er decompiler og genbruger?
Avatar billede arne_v Ekspert
16. november 2009 - 19:40 #5
En URLClassLoader kan hente class filer via HTTP.

Jeg kan proeve at boxe et eksempel med det.

Men men men. Skal du ikke have en security manager loadet hvis du vil hente og udfoere kode fra nettet?
Avatar billede nidyahou Praktikant
16. november 2009 - 19:58 #6
Jeg ville blive meget taknemmelig hvis du gad at lave et eksempel.

mht. security manageren så tror jeg du ved det bedre end jeg. Jeg kan sige at det ikke er en class fil som brugerne får lov til at vælge selv. Det bestemmes af min kode hvilke class filer der skal hentes ind, så der er ikke fare for at de henter farlig kode ind.
Avatar billede arne_v Ekspert
16. november 2009 - 20:23 #7
from java.lang import Class
from java.net import URL
from java.net import URLClassLoader
cl = URLClassLoader([URL("http://localhost/")]);
o = Class.forName("Foobar", True, cl).newInstance()
o.m()
Avatar billede arne_v Ekspert
16. november 2009 - 20:24 #8
Avatar billede arne_v Ekspert
16. november 2009 - 20:24 #9
for at kunne vurdere sikkerhed skal jeg vide lidt mere som konteksten
Avatar billede nidyahou Praktikant
17. november 2009 - 02:53 #10
jeg får en fejl lige nu, men det er vist bare min egen skyld

hvordan ville du få fat på en eksempelclass:

package foo.bar

public class Foobar {
    public void m() {
        System.out.println("Det virker");
    }
}

der lå på www.foo-bar.com/boo/far/

?

Drop gerne svar
Avatar billede arne_v Ekspert
17. november 2009 - 02:58 #11
Hvis den ligger som:

http://www.foo-bar.com/xxx/foo/bar/Foobar.class

(bemærk at jeg ændrede dir struktur til at match package navn !!)

burde den kunne loades med:

cl = URLClassLoader([URL("http://www.foo-bar.com/xxx/")]);
o = Class.forName("foo.bar.Foobar", True, cl).newInstance()
Avatar billede nidyahou Praktikant
17. november 2009 - 03:28 #12
Perfekt!
og meget fin service i nattens mulm og mørke. Det demografisk overtal af kodekarle der sidder og har firkantede øjne på de her tidspunkter arbejder bestemt for mine problemer. Jeg takker mange gange - du har reddet min natte... søvn.

=)
Avatar billede nidyahou Praktikant
17. november 2009 - 03:28 #13
og du må gerne droppe et svar ;)
Avatar billede arne_v Ekspert
17. november 2009 - 03:37 #14
svar
Avatar billede arne_v Ekspert
17. november 2009 - 03:37 #15
Og klokken er kun 21:37 her !
Avatar billede arne_v Ekspert
17. november 2009 - 03:40 #16
Af almindelig nysgerrighed: hvordan kan det være at du har lastet dig over Jython?

Det er efter min mening en fremragende kombination til visse formål (dynamisk sprog + al det man kan få fra Java), men hvis man smider en bold på gaden er chancen for at ramme en Jython programmør i nakken ikke specielt stor.
Avatar billede nidyahou Praktikant
17. november 2009 - 14:33 #17
Jeg er gigaenormisk python fan og så har jeg noget java som jeg skal arbejde med. Så virkede det mest oplagte at bruge jython :o)
Avatar billede nidyahou Praktikant
17. november 2009 - 14:50 #18
har du iøvrigt en kommentar til hvordan jeg i jython caster en klasse som base64 - jython ressourcer er lidt sparsomme :P
Avatar billede nidyahou Praktikant
17. november 2009 - 14:58 #19
problemet er at jeg får nogle helt forkerte tegn tilbage
Avatar billede arne_v Ekspert
17. november 2009 - 16:34 #20
Man caster ikke i Python paa samme maade som i Java. Det er ikke noedvendigt. Du kalder bare metoden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester