Agar System.loadLibrary()dapat berfungsi, pustaka (di Windows, DLL) harus berada di direktori di suatu tempat di Anda PATH atau di jalur yang tercantum di java.library.pathproperti sistem (sehingga Anda dapat meluncurkan seperti Java java -Djava.library.path=/path/to/dir).
Selain itu, untuk loadLibrary(), Anda menentukan nama dasar pustaka, tanpa .dllakhiran. Jadi, untuk itu /path/to/something.dll, Anda hanya akan menggunakan System.loadLibrary("something").
Anda juga perlu melihat persis apa UnsatisfiedLinkErroryang Anda peroleh. Jika tertulis sesuatu seperti:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no foo in java.library.path
maka ia tidak dapat menemukan pustaka foo (foo.dll) di PATHatau java.library.path. Jika tertulis sesuatu seperti:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()V
maka ada yang salah dengan pustaka itu sendiri dalam arti bahwa Java tidak dapat memetakan fungsi Java asli dalam aplikasi Anda ke mitra aslinya yang sebenarnya.
Untuk memulainya, saya akan meletakkan beberapa logging di sekitar System.loadLibrary()panggilan Anda untuk melihat apakah itu dijalankan dengan benar. Jika itu melontarkan pengecualian atau tidak dalam jalur kode yang benar-benar dieksekusi, maka Anda akan selalu mendapatkan jenis terakhir yang UnsatisfiedLinkErrordijelaskan di atas.
Sebagai catatan kecil, kebanyakan orang menempatkan loadLibrary()panggilan mereka ke dalam blok penginisialisasi statis di kelas dengan metode asli, untuk memastikan bahwa itu selalu dieksekusi tepat sekali:
class Foo {
static {
System.loadLibrary('foo');
}
public Foo() {
}
}