• Java

    Java Native Interface

    Java Native Interface (JNI) merupakan framework yang mengizinkan kode Java untuk memanggil native language seperti C, C+, maupun asemby. JNI dibutuhkan untuk mengoptimalkan performa pada Java.

    Install terlebih dahulu tools yang diperlukan:

    1. JDK dan JRE
    2. Java IDE, pada kali ini digunakan Netbeans IDE 11.2.
    3. C++ IDE, pada kali ini digunakan Qt.

    Langkah pertama, buat project pada Netbeans.

    Buat Java class dengan nama file HelloJNI.java

    Buat kode sebagai berikut:

    public class HelloJNI {
        
        static {
            System.loadLibrary("HelloJNI");
        }
        
        private native void haii();
        
        public static void main(String[] args) {
          new HelloJNI().haii(); 
       }
        
    }

    Static initialer dibutuhkan untuk mengambil library native, menggunakan System.loadLibrary(). Selanjutnya adalah menghubungkan native method yang terdapat pada native library ke Java. Pada contoh di atas dibuat method dengan nama haii(). Untuk mencobanya dibuat fungsi utama main pada kelas di atas.

    Langkah selanjutkan adalah compile program Java tersebut.

    Jika berhasil dicompile, selanjutnya membuat header file untuk C/C++ dengan menggunakan bantuan command javah.

    javah -classpath target/classes org.akhal.example.hellojni.HelloJNI

    Jika berhasil, maka akan dihasilkan file dengan nama org_akhal_example_hellojni_HelloJNI.h

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class org_akhal_example_hellojni_HelloJNI */
    
    #ifndef _Included_org_akhal_example_hellojni_HelloJNI
    #define _Included_org_akhal_example_hellojni_HelloJNI
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     org_akhal_example_hellojni_HelloJNI
     * Method:    haii
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_org_akhal_example_hellojni_HelloJNI_haii
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    Selanjutnya buat program C/C++. Pada contoh ini digunakan Qt Creater.

    Tambahkan QMAKE_LFLAGS pada file .pro

    QMAKE_LFLAGS += -Wl,--add-stdcall-alias

    Tambahkan juga include path untuk Java pada file .pro

    INCLUDEPATH += "C:/Program Files (x86)/Java/jdk1.8.0_251/include/"
    INCLUDEPATH += "C:/Program Files (x86)/Java/jdk1.8.0_251/include/win32"

    Replace isi file org_akhal_example_hellojni_hellojni.h dengan kode hasil generate dari javah. Kemudian buat isi program untuk method haii() pada file org_akhal_example_hellojni_hellojni.cpp

    #include "org_akhal_example_hellojni_hellojni.h"
    
    JNIEXPORT void JNICALL Java_org_akhal_example_hellojni_HelloJNI_haii(JNIEnv *env, jobject thisObj) {
       printf("Hello World!\n");
       return;
    }

    Kemudian build program sehingga dihasilkan file HelloJNI.dll. Copy file tersebut ke folder project Netbeans.

    Langkah terakhir tes dengan cara menjalankan program Java. Akah diperoleh output seperti pada gambar di bawah ini:

  • Java

    Install Maven Local Repository

    Download Apache Maven disini.

    Tambahkan maven ke path pada Environment Variables.

    Jalankan command berikut ini:

    mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> 

    Jika file JAR di hasilkan oleh Apache Maven:

    mvn install:install-file -Dfile=<path-to-file> 

    Jika menggunakan pom-file:

    mvn install:install-file -Dfile=<path-to-file> -DpomFile=<path-to-pomfile> 

    Keterangan:
    <path-to-file> lokasi file jar
    <group-id> nama group id (misal: org.akhal)
    <artifact-id> nama library (misal: kbbi)
    <version> versi library
    <packaging> jenis packaging (misalkan: jar)

  • Java

    Format Currency Rupiah pada Java

    Import file:

    import java.text.DecimalFormat;
    import java.text.DecimalFormatSymbols;

    Format:

    DecimalFormat id = (DecimalFormat) DecimalFormat.getCurrencyInstance();
    DecimalFormatSymbols rp = new DecimalFormatSymbols();
    
    rp.setCurrencySymbol("Rp");
    rp.setMonetaryDecimalSeparator(',');
    rp.setGroupingSeparator('.');
    id.setDecimalFormatSymbols(rp);
    
    Double harga = 1000,10;
    id.format(harga);
  • Java

    LinkedHashMap

    Mirip seperti HashMap, tetapi dengan pengorderan data sesuai dengan urutan elemen yang didaftarkan (insertion-order).

    Contoh:

    LinkedHashMap<Integer, String> mapAngka = new LinkedHashMap<Integer, String>();
    mapAngka.put(1, "SATU");
    mapAngka.put(2, "DUA");
    mapAngka.put(3, "TIGA");
    mapAngka.put(4, "EMPAT");
    mapAngka.put(5,"LIMA");
    System.out.println(mapAngka);

    Hasil yang didapat:

    {1=SATU, 2=DUA, 3=TIGA, 4=EMPAT, 5=LIMA}