Sample code for 30+ languages & platforms
Java

Create Self-Extracting Executable (Windows-only)

Demonstrates how to create a Windows self-extracting EXE.

Chilkat Java Downloads

Java
import com.chilkatsoft.*;

public class zipProgress extends CkZipProgress
  {

  public boolean AbortCheck()
    {
    boolean abort = false;
    // Application code goes here.
    // Return true to abort, false to continue.
    return abort;
    }

  public boolean PercentDone(int percentDone)
    {
    boolean abort = false;
    System.out.println("Percent Done: " + percentDone);
    //  Explicitly abort at 25% or greater.
    //  Remove this to allow for the HTTP download to run to completion.
    if (percentDone > 25) {
        abort = true;
        }
    // Return true to abort, false to continue.
    return abort;
    }

  public void ProgressInfo(String name, String value)
    {
    System.out.println(name + ": " + value);
    return;
    }

};

public class ChilkatExample {

  static {
    try {
        System.loadLibrary("chilkat");
    } catch (UnsatisfiedLinkError e) {
      System.err.println("Native code library failed to load.\n" + e);
      System.exit(1);
    }
  }

  public static void main(String argv[])
  {
    boolean success = false;

    //  This example requires the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    CkZip zip = new CkZip();
    zipProgress zip_progress = new zipProgress();
    zip.put_EventCallbackObject(zip_progress);

    //  Initialize the zip object.  Because we're creating
    //  a self-extracting EXE in this example, the filename
    //  passed to NewZip will never actually be created.
    success = zip.NewZip("notUsed.zip");
    if (success != true) {
        System.out.println(zip.lastErrorText());
        return;
        }

    //  Append a directory tree.  The AppendFiles does
    //  not read the file contents or append them to the zip
    //  object in memory.  It simply appends references
    //  to the files so that when WriteExe (or WriteZipAndClose,
    //  or WriteZip, etc.) is called, the files are compressed
    //  and added to the archive.
    boolean recurse = true;
    zip.AppendFiles("c:/temp/a/*",recurse);

    //  Write "sfx.exe"
    success = zip.WriteExe("c:/temp/sfx.exe");
    if (success != true) {
        System.out.println(zip.lastErrorText());
        return;
        }
  }
}