2

Java でハード リンクを作成するための JNA ライブラリの簡単な使用法を次に示します。

import com.sun.jna.Library;
import com.sun.jna.Native;
import java.io.File;
import java.io.IOException;

public final class HardLink {

    private static final LibC LIBC = (LibC)Native.loadLibrary("c", LibC.class);

    private HardLink() {
    }

    public static void link(File src, File dest) throws IOException {
        if (LIBC.link(src.toString(), dest.toString()) != 0)
            throw new IOException(LIBC.strerror(Native.getLastError()));
    }

    public static void main(String[] args) throws Exception {
        System.out.println("Attempting to hardlink " + args[0] + " -> " + args[1]);
        HardLink.link(new File(args[0]), new File(args[1]));
    }

    private interface LibC extends Library {
        int link(String from, String to);
        String strerror(int errno);
    }
}

このプログラムを JNA 3.4.0 を使用して Mac OS X 10.7.4 (Lion) で実行すると、動作しますが、何らかの理由でfork()- を実行しています。これは、Java アイコンがポップアップ (が表示されます) がタスク バーに表示され、コマンド バーにプログラム名として「HardLink」が表示されます。

私の質問は次のとおりです。なぜJNAはfork()(またはそれをしているのですか)?このプログラムに何か問題がありますか?

注: Java からファイルをハード リンクする他の方法には興味がありません。これはほんの一例です。

4

1 に答える 1

3

ヘッドレスで実行していない限り、JNA はいくつかの AWT クラスをロードします。Java プロセスが OSX Dock に表示されるのは、AWT 関連のクラス (Swing を含む) のロードです。

-Djava.awt.headless=true を指定してプログラムを実行します。これにより、OSX ドックに表示されなくなります。

于 2012-07-18T17:53:05.390 に答える