JNI. Denne artikel beskriver JNI (Java Native Interface) som er måden hvorpå Java kan kalde native kode.
|
|
- Finn Ibsen
- 6 år siden
- Visninger:
Transkript
1 Denne guide er oprindeligt udgivet på Eksperten.dk JNI Denne artikel beskriver JNI (Java Native Interface) som er måden hvorpå Java kan kalde native kode. Den viser et simpelt eksempel og forklarer hvordan man bygger med forskellige compilere. Den forudsætter kendskab til Java og C men ikke til JNI. Skrevet den 17. Feb 2010 af arne_v I kategorien Programmering / Java [vigtigt: artikel er samme artikel som denne - der gik koks i det i forbindelse med 2 store nedbrud på Eksperten for mange år siden - først ville jeg ikke slette en af dem af hensyn til dem som havde "betalt" for artiklen og nu beholder jeg duplikaterne af hensyn til afgivne kommentarer] Historie: V1.0-11/04/ original V1.1-20/08/ vis også hvordan man fra C kan kalde Java V1.2-16/02/ smårettelser Baggrund Java er platforms uafhængigt (eller Java er en platform - hvis man foretrækker den formulering). Det betyder at Java ikke har den samme support for at interface operativ systemet som f.eks. C programmer har. Det er et meget bevidst valg fra SUN's side at et Java program skal kunne køre uændret på alle platforme. Og det udelukker ting som kun kan gøres på Windows, ting som kun kan gøres på Linux etc.. Imidlertid har programmer ude i den virkelige verden sommetider behov for at bruge noget platformt specifikt. Man vil have fat i nogle oplysninger om hvilke diske der sidder i systemet. På Windows vil man have fat i registerings databasen. Javas løsning på det problem hedder JNI. JNI (Java Native Interface) muliggør at kalde C/C++ kode fra Java kode. Så kan man kode sine operativ system specifikke funktioner i C og kalde den C kode fra Java. Ens Java kode er naturligvis ikke længere portabelt til alle platforme hvor Java er til rådighed, men kun til de platforme hvor man har lavet den native kode som man skal bruge. Derfor skal man når behovet for JNI opstår lige overveje om Java nu også er det rette valg af programmerings sprog. Hvis man stadigvæk mener det, så laver man en JNI løsning. Teori
2 Princippet i at bruge JNI er: 1) Man laver en Java klasse med nogle metoder som har keyword native i erklæringen og ingen implementation. 2) Man compiler den.java fil og kører javah programmet på den resulterende.class fil. Programmet javah genererer en.h fil med C erklæringer af metoderne. 3) Man skriver en.c/.cpp fil som implementerer funktionerne som erklæret i den genererede.h fil. 4) Man bygger.c/.cpp filen til et modul som kan loades dynamisk. Windows: en.dll fil, Linux: en.so fil. 5) Man bruger Java klassen helt normalt i sin Java kode. Eksempel kode MinKlasse.java package minpakke; // klasse som indeholder de native metoder public class MinKlasse // native metoder public native String dup(string s); public native int add(int a, int b); // load dynamic library (Win32.dll file/linux.so file) når klassen første gang bruges static System.loadLibrary("mitlib"); minpakke_minklasse.h (genereret af javah) /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class minpakke_minklasse */ #ifndef _Included_minpakke_MinKlasse #define _Included_minpakke_MinKlasse #ifdef cplusplus extern "C" #endif /* * Class: minpakke_minklasse * Method: dup * Signature: (Ljava/lang/String;)Ljava/lang/String;
3 */ JNIEXPORT jstring JNICALL Java_minpakke_MinKlasse_dup (JNIEnv *, jobject, jstring); /* * Class: minpakke_minklasse * Method: add * Signature: (II)I */ JNIEXPORT jint JNICALL Java_minpakke_MinKlasse_add (JNIEnv *, jobject, jint, jint); #ifdef cplusplus #endif #endif minpakke_minklasse.c #include <string.h> #include <jni.h> #include "minpakke_minklasse.h" /* buffer til at returnere string resultateri (vigtigt: denne kode er ikke thread safe) */ static char retbuf[1000]; /* funktions erklæring fra genererede.h fil */ JNIEXPORT jstring JNICALL Java_minpakke_MinKlasse_dup(JNIEnv *cntx, jobject me, jstring s) const char *s2; /* konverter fra Java string til C nul termineret char array */ s2 = (*cntx)->getstringutfchars(cntx,s,0); /* dupliker streng */ strcpy(retbuf,s2); strcat(retbuf,s2); /* frigiv dynamisk allokeret char array */ (*cntx)->releasestringutfchars(cntx,s,s2); /* konverter fra nul termineret char array til Java string og returner denne */ return (*cntx)->newstringutf(cntx,retbuf); /* funktions erklæring fra genererede.h fil */ JNIEXPORT jint JNICALL Java_minpakke_MinKlasse_add(JNIEnv *cntx, jobject me, jint a, jint b) int a2,b2; /* simpel assign af integers */
4 a2 = a; b2 = b; /* plus og returner resultat */ return (a2 + b2); TestProgram.java package minpakke; // test program public class TestProgram public static void main(string[] args) throws Exception // lav instans af klassen med native metoder MinKlasse nat = new MinKlasse(); // kald native metoder System.out.println(nat.dup("abc")); System.out.println(nat.dup("123")); System.out.println(nat.add(12, 34)); System.out.println(nat.add(56, 78)); Byg og kør Den del der kommer med java er uafhængig af platform, men hvordan man bygger et C modul som kan loades dynamisk er platform og compiler specifikt. Jeg vil her vise kommandoerne for nogle af de mest gængse platforme/compilere. Eksemplerne vil bruge command line build. Læserne må selv finde ud af at lave det samme i IDE'en. Microsoft VC++ * compile med java include og java include win32 directory * link DLL * put dir med DLL i PATH javac -classpath.. MinKlasse.java javah -classpath.. -jni minpakke.minklasse cl /c /I\sunjava\jdk1.3.1\include /I\sunjava\jdk1.3.1\include\win32 minpakke_minklasse.c cl /LD minpakke_minklasse.obj /Femitlib.dll javac -classpath.. TestProgram.java path=.;%path% java -classpath.. minpakke.testprogram
5 Borland C++ Builder * compile med java include og java include win32 directory * link DLL med C og Windows libs * put dir med DLL i PATH javac -classpath.. MinKlasse.java javah -classpath.. -jni minpakke.minklasse bcc32 -c -I\sunjava\jdk1.3.1\include -I\sunjava\jdk1.3.1\include\win32 minpakke_minklasse.c ilink32 -Tpd minpakke_minklasse.obj c0d32.obj,mitlib.dll,,cw32.lib import32.lib javac -classpath.. TestProgram.java path=.;%path% java -classpath.. minpakke.testprogram GCC/mingw32 * compile med java include og java include win32 directory * link DLL og fix calling convention * put dir med DLL i PATH javac -classpath.. MinKlasse.java javah -classpath.. -jni minpakke.minklasse gcc -c -I\sunjava\jdk1.3.1\include -I\sunjava\jdk1.3.1\include\win32 minpakke_minklasse.c -o minpakke_minklasse.obj gcc -s -shared -Wl,--export-all,--kill-at minpakke_minklasse.obj -o mitlib.dll javac -classpath.. TestProgram.java path=.;%path% java -classpath.. minpakke.testprogram GCC/Linux * compile med java include og java include linux directory * link so med lib prefix * put dir med so i LD_LIBRARY_PATH javac -classpath.. MinKlasse.java javah -classpath.. -jni minpakke.minklasse gcc -c -I/usr/java/jdk1.3.1/include -I/usr/java/jdk1.3.1/include/linux minpakke_minklasse.c -o minpakke_minklasse.o gcc -s -shared minpakke_minklasse.o -o libmitlib.so javac -classpath.. TestProgram.java LD_LIBRARY_PATH=`pwd` export LD_LIBRARY_PATH java -classpath.. minpakke.testprogram (erstat stier til Java med stier til din Java version på dit system) Afsluttende kommentarer
6 Der er masser af ting i forbindelse med argumenterne som jeg ikke er kommet ind på her, men dette burde være nok til at komme igang. Til andre sprog end C/C++ må man enten selv lave den rette rutine erklæring eller også bruge en C/C++ wrapper. Bemærk at i J2EE/Java EE kontekst er det kun JCA adaptorer som bør bruge JNI. Kalde Java fra C/C++ Det er også muligt at kalde Java kode fra et C/C++ program. Det bruges meget sjældent. Når det bruges er det normalt som launcher af et main program skrevet i Java. Normalt er det nok at lave en executable jar fil (en jar fil med et manifest med et Main-Class direktiv og evt. suppleret med et Class-Path diretiv). Men hvis man vil have sat specielle options til Java og man ikke kan lide tanken om en BAT fil eller hvis det skal startes som en windows service eller eller hvis man ikke vil være afhængig af at windows associationen til.jar peger korrekt på javaw, så kan man lave sin egen EXE wrapper. Jeg vil vise 2 eksempler som illustrerer teknikken. Console app test\test.java: package test; public class Test public static void main(string[] args) for(int i = 0; i < args.length; i++) System.out.println("arg " + i + " = " + args[i]); System.out.println("maxmem = " + Runtime.getRuntime().maxMemory()); startjava.c: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <jni.h> void start_java(int maxmem, char *classpath, char *mainclass,int nargs,char **args) JavaVMOption options[2];
7 JavaVMInitArgs vm_args; JNIEnv *env; JavaVM *jvm; jint res; jclass mainclassptr; jmethodid mainmethod; jobjectarray mainargs; jstring *mainargsptr; int i; char maxmemopt[16]; char classpathopt[1024]; char mainclass2[128]; sprintf(maxmemopt,"-xmx%dm",maxmem); sprintf(classpathopt,"-djava.class.path=%s",classpath); options[0].optionstring = maxmemopt; options[1].optionstring = classpathopt; vm_args.version = JNI_VERSION_1_4; vm_args.noptions = 2; vm_args.options = options; vm_args.ignoreunrecognized = JNI_FALSE; res = JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args); if(res<0) printf("error creating JVM\n"); strcpy(mainclass2,mainclass); for(i=0;i<strlen(mainclass2);i++) if(mainclass2[i]=='.') mainclass2[i]='/'; mainclassptr = (*env)->findclass(env,mainclass2); if(mainclassptr==null) printf("error finding class %s\n",mainclass); mainmethod = (*env)->getstaticmethodid(env,mainclassptr,"main", "([Ljava/lang/String;)V"); if (mainmethod==null) printf("error getting main method in class %s\n",mainclass); mainargs = (*env)->newobjectarray(env,nargs,(*env)->findclass(env,"java/lang/string"),nul L); mainargsptr = (jstring *)malloc(nargs*sizeof(jstring)); for(i=0;i<nargs;i++) mainargsptr[i] = (*env)->newstringutf(env,args[i]); (*env)->setobjectarrayelement(env,mainargs,i,mainargsptr[i]);
8 (*env)->callstaticvoidmethod(env,mainclassptr,mainmethod,mainargs); free(mainargsptr); (*jvm)->destroyjavavm(jvm); int main(int argc,char *argv[]) /* * java -Xmx128m -classpath test.jar test.test A BB CCC */ char *args[] = "A", "BB", "CCC" ; start_java(128, "test.jar", "test.test", 3, args); return 0; build med Microsoft VC++: cd test javac Test.java cd.. jar cvf test.jar test\test.class java -classpath test.jar test.test X YY ZZZ cl /I\sunjava\j2sdk1.4.2_02\include /I\sunjava\j2sdk1.4.2_02\include\win32 startjava.c /link C:\sunjava\j2sdk1.4.2_02\lib\jvm.lib path=c:\sunjava\j2sdk1.4.2_02\jre\bin\client;%path% startjava Windows app TestGUI.java: import java.awt.*; import javax.swing.*; public class TestGUI extends JFrame public TestGUI() seticonimage(toolkit.getdefaulttoolkit().getimage("j.gif")); settitle("start Java"); setdefaultcloseoperation(jframe.exit_on_close); getcontentpane().setlayout(new GridLayout(1, 1)); getcontentpane().add(new JLabel("Det virker")); pack(); public static void main(string[] args) TestGUI f = new TestGUI(); f.setvisible(true);
9 startjava2.c: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #include <tchar.h> #include <jni.h> #include "j.h" void start_java(int maxmem, char *classpath, char *mainclass,int nargs,char **args) JavaVMOption options[2]; JavaVMInitArgs vm_args; JNIEnv *env; JavaVM *jvm; jint res; jclass mainclassptr; jmethodid mainmethod; jobjectarray mainargs; jstring *mainargsptr; int i; char maxmemopt[16]; char classpathopt[1024]; char mainclass2[128]; sprintf(maxmemopt,"-xmx%dm",maxmem); sprintf(classpathopt,"-djava.class.path=%s",classpath); options[0].optionstring = maxmemopt; options[1].optionstring = classpathopt; vm_args.version = JNI_VERSION_1_4; vm_args.noptions = 2; vm_args.options = options; vm_args.ignoreunrecognized = JNI_FALSE; res = JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args); if(res<0) MessageBox(NULL,_T("Error creating JVM"),_T("Error"),MB_OK); strcpy(mainclass2,mainclass); for(i=0;i<strlen(mainclass2);i++) if(mainclass2[i]=='.')
10 mainclass2[i]='/'; mainclassptr = (*env)->findclass(env,mainclass2); if(mainclassptr==null) MessageBox(NULL,_T("Error finding class"),_t("error"),mb_ok); mainmethod = (*env)->getstaticmethodid(env,mainclassptr,"main", "([Ljava/lang/String;)V"); if (mainmethod==null) MessageBox(NULL,_T("Error getting main method in class"),_t("error"),mb_ok); mainargs = (*env)->newobjectarray(env,nargs,(*env)->findclass(env,"java/lang/string"),nul L); mainargsptr = (jstring *)malloc(nargs*sizeof(jstring)); for(i=0;i<nargs;i++) mainargsptr[i] = (*env)->newstringutf(env,args[i]); (*env)->setobjectarrayelement(env,mainargs,i,mainargsptr[i]); (*env)->callstaticvoidmethod(env,mainclassptr,mainmethod,mainargs); free(mainargsptr); (*jvm)->destroyjavavm(jvm); int WINAPI WinMain (HINSTANCE hthisinstance,hinstance hprevinstance,lpstr szcmdline,int icmdshow) /* * java -Xmx128m -classpath mlf.jar MultiLookAndFeel */ start_java(128, "tg.jar", "TestGUI", 0, NULL); return 0; j.rc: #include "j.h" IDI_J ICON "j.ico" j.h:
11 #define IDI_J 101 j.ico og j.gif indeholder det icon man vil bruge build med Microsoft VC++: javac TestGUI.java jar cvf tg.jar TestGUI.class java -classpath tg.jar TestGUI rc j.rc cl /I\sunjava\j2sdk1.4.2_02\include /I\sunjava\j2sdk1.4.2_02\include\win32 startjava2.c /link j.res C:\sunjava\j2sdk1.4.2_02\lib\jvm.lib user32.lib gdi32.lib /machine:x86 /subsystem:windows path=c:\sunjava\j2sdk1.4.2_02\jre\bin\client;%path% startjava2 Kommentar af simonvalter d. 03. May stadigvæk god ;) Kommentar af nitte d. 23. May
RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
Læs mereMySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.
Denne guide er oprindeligt udgivet på Eksperten.dk MySQL C API Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab
Læs mereapplikation----x----odbc driver manager----foobar ODBC driver----foobar database
Denne guide er oprindeligt udgivet på Eksperten.dk ODBC i C/C++ Denne artikel beskriver hvordan man bruger ODBC i C/C++. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab
Læs mereSend fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.
Denne guide er oprindeligt udgivet på Eksperten.dk Send email fra Java Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende email fra Java. Simple eksempler ikke noget vildt
Læs mereTest med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.
Denne guide er oprindeligt udgivet på Eksperten.dk Test med JUnit 3 Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab
Læs mereSingleton pattern i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er
Læs mereSingleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
Læs mereThreads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter
Læs mereHvilket sprog er hurtigst
Denne guide er oprindeligt udgivet på Eksperten.dk Hvilket sprog er hurtigst Denne artikel forsøger at aflive forskellige myter om hvilke sprog der er hurtigst. Den forudsætter ikke noget særligt. Skrevet
Læs mereDen forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.
Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter
Læs mereRMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.
Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter
Læs mere//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!
Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for
Læs mereTilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.
Denne guide er oprindeligt udgivet på Eksperten.dk Tilfældige tal Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Den forudsætter
Læs mereDen forudsætter kendskab til XML og C# men ikke til brug af XML i C#.
Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i C# Denne artikel vil vise lidt om hvordan man kan bruge XML i C#. Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.
Læs mereAnvendelse af metoder - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur
Læs merePrepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.
Denne guide er oprindeligt udgivet på Eksperten.dk Prepared Statements Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Skrevet den 18. Feb 2010
Læs mereParameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.
Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Der findes en tilsvarende artikel med
Læs mereForskellige Java versioner
Denne guide er oprindeligt udgivet på Eksperten.dk Forskellige Java versioner Denne artikel beskriver lidt om de forskellige Java versioner. Den forklarer J2SE/J2ME/J2EE, plugin/jre/sdk og Sun Java/Microsoft
Læs mereIntroduktion til ant. Denne artikel beskriver Apache ant, som er et værktøj til at builde Java applikationer med.
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til ant Denne artikel beskriver Apache ant, som er et værktøj til at builde Java applikationer med. Den beskriver nogle af de mest brugte
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
Læs mereDen forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.
Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i VB.NET Denne artikel vil vise lidt om hvordan man kan bruge XML i VB.NET. Den forudsætter kendskab til XML og VB.NET men ikke til brug af
Læs mereDelphi - CrackMe og Keygen
Denne guide er oprindeligt udgivet på Eksperten.dk Delphi - CrackMe og Keygen Dette er min første artikel! :) Men jeg synes nu den er blevet meget god! :D Jeg giver et et eksempel på hvordan man kan lave
Læs mereLogging i Java. Den forudsætter kendskab til Java og noget generel udviklings erfaring. Denne guide er oprindeligt udgivet på Eksperten.
Denne guide er oprindeligt udgivet på Eksperten.dk Logging i Java Denne artikel beskriver baggrunden for logging frameworks og viser hvordan man bruger 2 af de mest almindelige: Apache Log4J og J2SE/Java
Læs mereNye features i Java 1.5/5.0
Denne guide er oprindeligt udgivet på Eksperten.dk Nye features i Java 1.5/5.0 Denne artikel beskriver nye features i Java 1.5/5.0, som lige er kommet i final (ikke-beta) udgave. Den forudsætter et vist
Læs mereHvad er Objekter - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4
DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens
Læs mereIntroduction til.net remoting i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab
Læs mereOffset til terminalskærm i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Offset til terminalskærm i Java Ikke en atikkel - men en Classe til java der gør det nemt at skrive ud på avancerede måder når man kun opererer i dosvindue.
Læs mereArkitektur for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Arkitektur for begyndere Denne artikel beskriver forskellige basale n-tier arkitekturer. Som man bør kende og have valgt inden man går igang med at udvikle
Læs mereBits, bit operationer, integers og floating point
Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11
DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void
Læs mereSystemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111
DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald
Læs mereUndtagelseshåndtering i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide
Læs mereTest med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.
Denne guide er oprindeligt udgivet på Eksperten.dk Test med NUnit Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab
Læs mereIntroduction til.net remoting i VB.NET
Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter
Læs mereCivilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104
Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave
Læs mereSkrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET
Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til VB.NET og ADO.NET. Der findes en tilsvarende artikel
Læs mereXML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.
Denne guide er oprindeligt udgivet på Eksperten.dk XML parsning i Java Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM. Den forudsætter kendskab til Java og XML.
Læs mereDM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11
DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4
Læs mereHvilket sprog skal jeg lære?
Denne guide er oprindeligt udgivet på Eksperten.dk Hvilket sprog skal jeg lære? Denne artikel snakker lidt løst og fast om den kendte problem stilling med hvilket sprog man skal lære (generelle programmerings
Læs mereJava Klasse nedarvninger
Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering
Læs mereIntroduktion til NAnt
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til NAnt Denne artikel beskriver NAnt, som er et værktøj til at builde.net applikationer med. Den beskriver nogle af de mest brugte NAnt
Læs mereSom sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste
Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),
Læs mereDANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
Læs mereb) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.
Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning
Læs mere.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.
Denne guide er oprindeligt udgivet på Eksperten.dk.NET 4.5 og C# 5.0 Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#. Skrevet den 11.
Læs mereDM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/
DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!
Læs mereOverblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java
OOP1 Java intro. Klasser, objekter, interfaces, nedarvning, Association, Aggregation og Composition mvh. Try and catch exceptions. Package Intro. til jar filer. Overblik Compile-time Environment Run-time
Læs mereObjektorienteret Programmering
Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereIndledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.
Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19
Læs mereA Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Læs mereLibraries i C. Thomas Bøgholm. Marts En kort introduktion. Aalborg Universitet
Libraries i C En kort introduktion Thomas Bøgholm Aalborg Universitet Marts 2010 Outline Motivation Hvad er et library Brugen af libraries Eksempler - med live kode Dit eget library Opgaver 2/18 Motivation
Læs mereNye Java XML API'er
Denne guide er oprindeligt udgivet på Eksperten.dk Nye Java XML API'er Denne artikel beskriver nye XML features i Java 1.6 - StAX og JAXB, samt XStreams. Den forudsætter kendskab til Java og brug
Læs mereHvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation
Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et
Læs mereIntroduktion til funktioner, moduler og scopes i Python
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for
Læs mereDelphi og Databaser for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Delphi og Databaser for begyndere Denne artikel handler om hvordan man udnytter noget af det bedste i Delphi: Dets gode muligheder for integrering med
Læs mereAAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal
Læs mereHvilket sprog skal jeg lære?
Denne guide er oprindeligt udgivet på Eksperten.dk Hvilket sprog skal jeg lære? Denne artikel snakker lidt løst og fast om den kendte problem stilling med hvilket sprog man skal lære (generelle programmerings
Læs mereCVS som KS-værktøj E3-104. Branching, Merging m.v.
CVS som KS-værktøj E3-104 Branching, Merging m.v. Gennemgang af Oprettelse af CVS-træ Tilføj filer Commit Fil forskelle Merging Branching Ekstra værktøjer Avanceret Oprettelse af CVS-træ report graphics
Læs mereAbstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Læs mereDatabase design for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Database design for begyndere Denne artikel beskriver hvordan man kommer fra ide til database design. Den stopper inden normal former. Den forudsætter
Læs mereUgeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Læs mereGeografisk lokalisering i ASP.NET
Denne guide er oprindeligt udgivet på Eksperten.dk Geografisk lokalisering i ASP.NET Denne artikel forklarer lidt om hvorfor og hvordan man laver geografisk lokalisering og viser noget kode. Der er andre
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereEndnu mere om tilfældige tal
Denne guide er oprindeligt udgivet på Eksperten.dk Endnu mere om tilfældige tal Denne artikel bygger oven på de to forrige artikler om tilfældige tal. Den indeholder lidt matematik og anvendelse på PHP
Læs mereIntroduktion til AOP i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til AOP i C# Denne artikel giver en introduktion AOP (Aspect Oriented Programming) i C#. Den forudsætter et pænt kendskab til programmering,
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
Læs mereDatabaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
Læs mereProcesser og tråde. dopsys 1
Processer og tråde dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne) hhv. små systemer: Multiprogrammering og time-sharing (fra 60 erne og frem): dopsys
Læs mereLærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen
Lærevejledning - en introduktion til maskinarkitektur faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig Basisuddannelse
Læs mereKursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Læs mereIntroduktion til SQL queries
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til SQL queries Denne artikel beskriver nogle forskellige muligheder i SQL queries. Eksemplerne skulle gerne være standard SQL og virke i
Læs mereGeografisk lokalisering i JSP
Denne guide er oprindeligt udgivet på Eksperten.dk Geografisk lokalisering i JSP Denne artikel forklarer lidt om hvorfor og hvordan man laver geografisk lokalisering og viser noget kode. Der er andre artikler
Læs mereTech College Aalborg. HomePort. Projekt Smart Zenior Home Guide til udvikling af nye adaptere til HomePort
Tech College Aalborg HomePort Projekt Smart Zenior Home Guide til udvikling af nye adaptere til HomePort Indhold HomePort Adapter Step-for-Step... 2 Linux... 2 Installér IDE... 2 HomePort på GitHub...
Læs mereVirkefeltsregler i Java
Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten
Læs mereAt klippe en streng over på det mest hensigtsmæssige sted
Denne guide er oprindeligt udgivet på Eksperten.dk At klippe en streng over på det mest hensigtsmæssige sted Formålet med denne artikel er at kaste lidt lys over, hvordan man klipper en streng over på
Læs mereEksempel: Skat i år 2000
Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereTest af It-komponent
Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side
Læs mereimport java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label
Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.
Læs mereLøsning af møntproblemet
Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder
Læs mereI denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.
Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations
Læs mereIntroduktion til ActionScript, fortsat
Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling
Læs mereNye features i Java 1.7/7.0
Denne guide er oprindeligt udgivet på Eksperten.dk Nye features i Java 1.7/7.0 Denne artikel beskriver nye features i Java 1.7/7.0, som blev releaset 28. juli 2011. Den forudsætter et vist kendskab til
Læs mereGrundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering
Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af
Læs mereI denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.
Denne guide er oprindeligt udgivet på Eksperten.dk Afrund til helt tal I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Skrevet den 03. Feb 2009 af tjomsen I kategorien
Læs mereLRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);
Læs mereKursusarbejde 2 Grundlæggende Programmering
Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................
Læs mereKursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Læs mereSpecifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api
Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereMartin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox
Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...
Læs mereHvordan vælger jeg dokumentprofilen?
Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel
Læs mereDM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7
DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4
Læs mereVideregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
Læs mereSpeciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)
Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP) Speciale efterår 2005 Teknisk Informationsteknologi Jan Lauritzen & Mads
Læs mereModern Concurrency Abstractions for C#
Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation
Læs mere