I always wanted to play around with JNI. This is my first attempt so I created a utility DLL called TestImpl.dll that exports several useful functions which are difficult or impossible to implement in JAVA.
Test.java is the sample application which calls each of the functions below.
TestImp.cpp contains the code to produce TestImp.dll and exports the functions below. TestImpl.dll is loaded by Java code using the following line:
public native void print(String msg);
This is trivial and just prints the supplied
string using a
public native byte readFile(String path);
This function reads a file and returns a
public native int searchFile(String path, byte b, int bLength);
This function performs a very fast binary search of a file for the supplied
public native String findFiles(String path, String mask);
This function will return a
String of file names that match the supplied mask. i.e. *.*, *.java, *.class ...
public native String checkProcess(String processName, boolean killIt,
This function will check for a running process (use the same process name you see in Task Manager), list all running processes (use " " for the process name), or kill a process.
public native int startProcess(String commandLine, String workingDir);
This function will call
public native boolean waitForFileMask(String directory, String fileMask);
This function will wait(block) until a file that matches the supplied mask (*.java, *.class, *.txt ...) appears in the supplied directory.
public native boolean waitForAnyFile(String directory);
This function will wait(block) until any file is added, renamed or deleted from the supplied directory.
I have included a project (VC++ 6.0) with all required files to build the DLL and a sample Java file that calls each of the above functions. You may need to edit the javac_.bat and Test_run.bat files to point to your Java installation (I run multiple versions).
- 20th May, 2003: Initial post