2

这是使用 JNA 库在 Java 中创建硬链接的简单用法:

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 类。加载与 AWT 相关的类(包括 Swing)会导致 Java 进程出现在 OSX Dock 中。

Run your program with -Djava.awt.headless=true. This will prevent it from showing up in the OSX dock.

于 2012-07-18T17:53:05.390 回答