Сделаем простую телефонную книжку.
1. Создадим файл Phonebook.java:

Код:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Phonebook extends JFrame {
   private JTable tblDemo = null;
   private DefaultTableModel tblModel = null;

   // Считывает данные из файла, и добавляет их в сетку
   private void GetItems() {
	   String[] arrColumns = {"ID", "Имя", "Телефон", "Факс", "Эл.почта"};
	   String str = "";
	   String arrdata[] = null;

       tblModel  = new DefaultTableModel(arrColumns, 0);
       tblDemo = new JTable(tblModel);
       add(new JScrollPane(tblDemo)); 
       for(int j=0; j<getRecordsCount(); j++) {
    str = getPhone(j);
    arrdata = str.split("~");
    tblModel.addRow(new Object[]{new Integer(j), arrdata[0], arrdata[1], arrdata[2], arrdata[3]});   
	   }
   }

   // Конструктор
   public Phonebook() {
     try {
       setTitle("Записная книжка");
       setSize(640, 480);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	   GetItems();
	   JMenuBar bar = new JMenuBar();
	   JMenu mnuFile = new JMenu("Файл");
	   JMenuItem popupNewRecord = new JMenuItem("Добавить новую запись");
	   popupNewRecord.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e){  
    	   JFrame frm = new JFrame();
    	   JLabel lbName = new JLabel("Имя:");
    	   JLabel lbPhone = new JLabel("Телефон:");
    	   JLabel lbFax = new JLabel("Факс:");
    	   JLabel lbEmail = new JLabel("Эл.почта:");
    	   JTextField txtName = new JTextField();
    	   JTextField txtPhone = new JTextField();
    	   JTextField txtFax = new JTextField();
    	   JTextField txtEmail = new JTextField();
    	   JButton btnOK = new JButton("Сохранить");
    	   JButton btnCancel = new JButton("Отменить");

    	   frm.setTitle("Новая запись");
    	   frm.setSize(640, 480);
    	   frm.setLayout(new GridLayout(5, 1));
    	   frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    	   txtName.setMargin(new Insets(10, 10, 10, 10));
    	   
    	   btnOK.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e){
        	addPhone(txtName.getText(), txtPhone.getText(), txtFax.getText(), txtEmail.getText());
        	getContentPane().remove(tblDemo);
        	GetItems();
        	getContentPane().repaint();
        	frm.dispose();
         }
    	   });

    	   btnCancel.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e){
        	frm.dispose();
         }
    	   });
    	   frm.add(lbName);
    	   frm.add(txtName);
    	   frm.add(lbPhone);
    	   frm.add(txtPhone);
    	   frm.add(lbFax);
    	   frm.add(txtFax);
    	   frm.add(lbEmail);
    	   frm.add(txtEmail);
    	   frm.add(btnOK);
    	   frm.add(btnCancel);
    	   frm.setVisible(true);
       }
	   });
	   mnuFile.add(popupNewRecord);
	   bar.add(mnuFile);
	   setJMenuBar(bar);
       setVisible(true);
     }
     catch(Exception ex) {
     }
   }

   static {
      System.loadLibrary("phonebook");
   }
   private native void addPhone(String name, String phonenumber, String fax, String email); // Добавить телефон
   private native int getRecordsCount();  // Получить количество записей из файла
   private native String getPhone(int id); // Считать определённу запись из файла

   public static void main(String[] args) {
      new Phonebook();
   }
}

2. Запустим команду javac -encoding utf8 -h . Phonebook.java
3. Создадим файл Phonebook.c:

Код:
#define FILENAME "phonebook.bin" // Имя файла, константа
#define MAX_SIZE_BUF 4096         // Максимальный размера буфера, константа
#include <jni.h>
#include <stdio.h>
#include "Phonebook.h"

// Запись телефонной книжки
typedef struct {
	char name[512];                 // Имя фамилия
	char phonenumber[30];       // Номер телефона
	char fax[30];                      // Номер факса
	char email[40];                  // Эл.почта
} RECORD;

// Проверка существует ли файл
int file_exist() {
  FILE *f;
  f = fopen(FILENAME, "r+b");
  if(f == NULL) return -1;
  else { 
    fclose(f);
    return 0;
  }
}

//Добавляет запись
JNIEXPORT void JNICALL Java_Phonebook_addPhone(JNIEnv *env, jobject obj, jstring name, jstring phonenumber, jstring fax, jstring email) {
  FILE *f;
  RECORD rec;
  f = fopen(FILENAME, "a+b");
  strcpy(rec.name, (*env)->GetStringUTFChars(env, name, NULL));
  strcpy(rec.phonenumber, (*env)->GetStringUTFChars(env, phonenumber, NULL));
  strcpy(rec.fax, (*env)->GetStringUTFChars(env, fax, NULL));
  strcpy(rec.email, (*env)->GetStringUTFChars(env, email, NULL));
  fwrite(&rec, sizeof(RECORD), 1, f);
  fclose(f);
}

//Читает запись
JNIEXPORT jstring JNICALL Java_Phonebook_getPhone(JNIEnv *env, jobject obj, jint recordid) {
  FILE *f;
  RECORD rec;
  int index=0;
  char buf[4096];
  if(file_exist() == -1) {
    f = fopen(FILENAME, "w+b");
    fclose(f);
    sprintf(buf, "~~~~");
    return (*env)->NewStringUTF(env, buf);
  }

  f = fopen(FILENAME, "r+b");
  fseek(f, sizeof(RECORD)*recordid, SEEK_CUR);
  fread(&rec, sizeof(RECORD), 1, f);
  sprintf(buf, "%s~%s~%s~%s", rec.name, rec.phonenumber, rec.fax, rec.email);
  return (*env)->NewStringUTF(env, buf);
  fclose(f);
}

// Возвращает количество записей в телефонной книжки
JNIEXPORT jint JNICALL Java_Phonebook_getRecordsCount(JNIEnv *env, jobject obj) {
  FILE *f;
  RECORD rec;
  int max;
  char buf[MAX_SIZE_BUF+1];
  f = fopen(FILENAME, "r+b");
  fseek(f, 0L, SEEK_END);
  max  = ftell(f);
  fclose(f);
  return max/sizeof(RECORD);
}

3. Phonebook.h:

Код:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Phonebook */

#ifndef _Included_Phonebook
#define _Included_Phonebook
#ifdef __cplusplus
extern "C" {
#endif
#undef Phonebook_FOCUS_TRAVERSABLE_UNKNOWN
#define Phonebook_FOCUS_TRAVERSABLE_UNKNOWN 0L
#undef Phonebook_FOCUS_TRAVERSABLE_DEFAULT
#define Phonebook_FOCUS_TRAVERSABLE_DEFAULT 1L
#undef Phonebook_FOCUS_TRAVERSABLE_SET
#define Phonebook_FOCUS_TRAVERSABLE_SET 2L
#undef Phonebook_TOP_ALIGNMENT
#define Phonebook_TOP_ALIGNMENT 0.0f
#undef Phonebook_CENTER_ALIGNMENT
#define Phonebook_CENTER_ALIGNMENT 0.5f
#undef Phonebook_BOTTOM_ALIGNMENT
#define Phonebook_BOTTOM_ALIGNMENT 1.0f
#undef Phonebook_LEFT_ALIGNMENT
#define Phonebook_LEFT_ALIGNMENT 0.0f
#undef Phonebook_RIGHT_ALIGNMENT
#define Phonebook_RIGHT_ALIGNMENT 1.0f
#undef Phonebook_serialVersionUID
#define Phonebook_serialVersionUID -7644114512714619750i64
#undef Phonebook_serialVersionUID
#define Phonebook_serialVersionUID 4613797578919906343i64
#undef Phonebook_INCLUDE_SELF
#define Phonebook_INCLUDE_SELF 1L
#undef Phonebook_SEARCH_HEAVYWEIGHTS
#define Phonebook_SEARCH_HEAVYWEIGHTS 1L
#undef Phonebook_OPENED
#define Phonebook_OPENED 1L
#undef Phonebook_serialVersionUID
#define Phonebook_serialVersionUID 4497834738069338734i64
#undef Phonebook_DEFAULT_CURSOR
#define Phonebook_DEFAULT_CURSOR 0L
#undef Phonebook_CROSSHAIR_CURSOR
#define Phonebook_CROSSHAIR_CURSOR 1L
#undef Phonebook_TEXT_CURSOR
#define Phonebook_TEXT_CURSOR 2L
#undef Phonebook_WAIT_CURSOR
#define Phonebook_WAIT_CURSOR 3L
#undef Phonebook_SW_RESIZE_CURSOR
#define Phonebook_SW_RESIZE_CURSOR 4L
#undef Phonebook_SE_RESIZE_CURSOR
#define Phonebook_SE_RESIZE_CURSOR 5L
#undef Phonebook_NW_RESIZE_CURSOR
#define Phonebook_NW_RESIZE_CURSOR 6L
#undef Phonebook_NE_RESIZE_CURSOR
#define Phonebook_NE_RESIZE_CURSOR 7L
#undef Phonebook_N_RESIZE_CURSOR
#define Phonebook_N_RESIZE_CURSOR 8L
#undef Phonebook_S_RESIZE_CURSOR
#define Phonebook_S_RESIZE_CURSOR 9L
#undef Phonebook_W_RESIZE_CURSOR
#define Phonebook_W_RESIZE_CURSOR 10L
#undef Phonebook_E_RESIZE_CURSOR
#define Phonebook_E_RESIZE_CURSOR 11L
#undef Phonebook_HAND_CURSOR
#define Phonebook_HAND_CURSOR 12L
#undef Phonebook_MOVE_CURSOR
#define Phonebook_MOVE_CURSOR 13L
#undef Phonebook_NORMAL
#define Phonebook_NORMAL 0L
#undef Phonebook_ICONIFIED
#define Phonebook_ICONIFIED 1L
#undef Phonebook_MAXIMIZED_HORIZ
#define Phonebook_MAXIMIZED_HORIZ 2L
#undef Phonebook_MAXIMIZED_VERT
#define Phonebook_MAXIMIZED_VERT 4L
#undef Phonebook_MAXIMIZED_BOTH
#define Phonebook_MAXIMIZED_BOTH 6L
#undef Phonebook_serialVersionUID
#define Phonebook_serialVersionUID 2673458971256075116i64
/*
 * Class:     Phonebook
 * Method:    addPhone
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_Phonebook_addPhone
  (JNIEnv *, jobject, jstring, jstring, jstring, jstring);

/*
 * Class:     Phonebook
 * Method:    getRecordsCount
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_Phonebook_getRecordsCount
  (JNIEnv *, jobject);

/*
 * Class:     Phonebook
 * Method:    getPhone
 * Signature: (I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_Phonebook_getPhone
  (JNIEnv *, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif

Создадим проект DLL.
Откомпилируем, если всё нормально то увидите такой экран:
https://i.ibb.co/SQyV29Y/phonebook-22-51-10-06-2021-min.jpg