Spēja rakstīt tikai vienu kodu kopu Java un likt tai darboties katrā sistēmā ar Java izpildlaiku ir viena no galvenajām Java priekšrocībām. Bet šai platformas neatkarībai ir viens galvenais trūkums: ko mēs darām ar milzīgo esošo kodu? Viltība ir izmantot tā saukto vietējās metodes interfeiss.
Vietējo metožu rakstīšana ietver C koda importēšanu Java lietojumprogrammā. Šajā padomā es iepazīstināšu jūs ar pamatmetodi vietējo metožu izveidošanai un izmantošanai Java lietojumprogrammā.
Septiņi soļi līdz vietējai metodei nirvana. Vietējo metožu izveide ir šāda:
- Uzrakstiet Java kodu
- Apkopo Java kodu
- Izveidot C galveni (.h fails)
- Izveidojiet C stublāji failu
- Uzrakstiet C kodu
- Izveidot koplietojamu kodu bibliotēku (vai DLL)
- Palaist lietojumprogrammu
Mūsu uzdevums ir ierakstīt tekstu konsolē no iekšējās metodes. Šī piemēra specifika tiks virzīta uz Unix līdzīgu sistēmu, īpaši Linux. Es norādīšu pāris vietas, kur informācija par citām platformām atšķiras.
Uzrakstiet Java kodu
Uzrakstiet savu Java kodu kā parasti. Lai Java kodā izmantotu vietējās metodes, jums jādara divas lietas. Vispirms uzrakstiet vietējās metodes deklarāciju katrai vietējai metodei, kuru vēlaties izmantot. Tas ir tāpat kā parastās Java metodes saskarnes deklarācijas rakstīšana, taču jums jānorāda dzimtā šādi:
public native void printText ();
Otrs loks, no kura jāiziet, ir skaidri jāielādē vietējā kodu bibliotēka. (Mēs to izveidosim vēlāk.) Mēs to darām, ielādējot bibliotēku klases statiskajā blokā:
statisks {System.loadLibrary ("laimīgs"); }
Lai saliktu šos gabalus mūsu piemērā, izveidojiet failu ar nosaukumu Laimīga.java
ar šādu saturu:
klase Happy {public native void printText (); statisks {System.loadLibrary ("laimīgs"); / * Ievērojiet klases nosaukuma mazos burtus! * /} public static void main (String [] args) {Priecīgs laimīgs = jauns Laimīgs (); laimīgs.printText (); }}
Apkopo Java kodu
Sastādiet Laimīga.java
fails:
% javac Happy.java
Izveidojiet C galvenes failu
Ir dažādi burvju burvestības, kas jādara pieejami, lai mūsu C kodu varētu izmantot kā vietējo metodi. The javah
Java kompilatora funkcionalitāte ģenerēs nepieciešamās deklarācijas un tādas no mūsu Laimīgs
klasē. Tas radīs Laimīgs.h
failu, kuru mēs iekļaujam savā C kodā:
% javah Priecīgs
Izveidojiet C stubu failu
Java kompilatoram ir līdzīgs trakums tādā veidā, kas atgādina sajaukšanu, ko C ++ tulkotāji izdara C ++ metožu nosaukumos. Lai mazinātu sāpes, kad jāraksta daudz garlaicīga koda, lai mūsu C kodu varētu izsaukt no Java izpildlaika sistēmas, Java kompilators var automātiski ģenerēt nepieciešamo batuta kodu mums:
% javah -stubs Prieks
Uzrakstiet C kodu
Tagad uzrakstīsim faktisko kodu, lai izdrukātu sveicienu. Pēc vienošanās mēs ievietojām šo kodu failā, kas nosaukts pēc mūsu Java klases, un tam pievienota virkne "Imp". Tā rezultātā HappyImp.c
. Ievietojiet: HappyImp.c
:
#include & ltStubPreamble.h> / * Standarta vietējās metodes sīkumi. * / # ietver "Happy.h" / * Izveidots agrāk. * / #include & ltstdio.h> / * Standarta C IO sīkumi. * / void Happy_printText (struct HHappy * this) {nodod ("Laimīgu Jauno gadu !!!"); }
Saskaroties ar savu C kodu ar Java, tiek iesaistīti daudzi citi aspekti - piemēram, kā nodot un atdot neskaitāmus veidus. Lai iegūtu papildinformāciju, skatiet Java apmācību vai Hermetica vietējo metožu dokumentu (URL skatiet sadaļā Resursi).
Izveidojiet koplietojamu bibliotēku
Šī sadaļa ir visvairāk atkarīga no sistēmas. Šķiet, ka katrai platformai un katrai kompilatora / saišu kombinācijai ir atšķirīga koplietojamo bibliotēku izveides un izmantošanas metode. Cilvēkiem, kuri izmanto kādu no dažādām Microsoft Windows platformām, pārbaudiet C kompilatora dokumentāciju, lai uzzinātu sīkāku informāciju.
Jums, Linux ļaudīm, šeit ir norādīts, kā izveidot koplietojamu bibliotēku, izmantojot GCC. Vispirms apkopojiet jau izveidotos C avota failus. Jums jāsaka kompilatoram, kur atrast Java vietējās metodes atbalsta failus, taču galvenais triks šeit ir tas, ka jums skaidri jāpasaka kompilatoram, lai tas ražo Position Esnav atkarīgs Coda:
% gcc -I / usr / local / java / include -I / usr / local / java / include / genunix -fPIC -c Happy.c HappyImp.c
Tagad no iegūto objektu (.o) failiem izveidojiet koplietojamu bibliotēku ar šādu maģisku burvestību:
% gcc -shared -Wl, -soname, libhappy.so.1 -o libhappy.so.1.0 Happy.o HappyImp.o
Kopējiet koplietojamās bibliotēkas failu uz standarta īso nosaukumu:
% cp libhappy.so.1.0 libhappy.so
Visbeidzot, jums, iespējams, būs jāpastāsta savam dinamiskajam linkerim, kur atrast šo jauno koplietojamās bibliotēkas failu. Izmantojot bash apvalks:
% eksportēt LD_LIBRARY_PATH = "pwd": $ LD_LIBRARY_PATH
Izpildiet lietojumprogrammu
Palaidiet Java lietojumprogrammu kā parasti:
% java Priecājies
Nu, tas ir viss, kas tam ir. Paldies Tonijam Deringam par Linux specifisko burvestību nodošanu.
Ātra dizaina piezīme
Pirms steidzos rakstīt vietējās metodes visam šim mantotajam kodam, es brīdinātu mūs visus uzmanīgi apskatīt esošās sistēmas un noskaidrot, vai ir labāki veidi, kā tās savienot ar Java. Piemēram, ir Java Database Connectivity (JDBC) un pat augstāka līmeņa risinājumi piekļuvei datu bāzēm no Java. Tātad, apskatiet visus trikus savā somā un izmantojiet to, kas ir jēga šim projektam.
Uzziniet vairāk par šo tēmu
- JavaSoft vietējās metodes apmācība //www.javasoft.com/books/Series/Tutorial/native/implementing/index.html
- Hermetica vietējo metožu dokuments //www.hermetica.com/technologia/java/native/
Šo stāstu “Java Tip 23: Write native methods” sākotnēji publicēja JavaWorld.