Java win32库/ api

时间:2010-12-24 10:55:34

标签: java

喜 是否有一个合适的Java win32库,例如,显示当前进程,找出进程已经采取的端口号等等? (或类似WMI库?) 感谢

5 个答案:

答案 0 :(得分:6)

看看JNA。它是一种100%纯Java方式与本机代码进行通信。

他们有一个名为Platform.jar的辅助库,它包含一些最常见的本机API。

虽然我知道它是什么,但我没有使用平台,所以我无法指出你在哪里可以找到你想要的东西。但是从我的全球JNA经验来看,这应该有助于很多!!!

(答案结束)


对于那些想知道它是如何工作的人(它在他们的主页上有解释)......好吧,假设他们已经为你处理了原生部分,以便你可以专注于java端。 主librairy(jna.jar)捆绑了许多本机lib(.dll,.so,.dylib)用于主要的os /架构和java端来操作它们(这解释了jar的大小:~1 Mo)。 / p>

当您想要使用多个OS lib名称“A.dll”,“A.so”或“libA.dylib”时,其中包含以下内容:

int doSomething(char* aString ,byte* aByteArray, long* arraySize)

只需编写以下内容,JNA将完成剩下的工作:

public class LibAWrapper{
  //tell JNA to link with native library
  Native.register("A");
  //Type mapping in java 
  public native int doSomething(String aString ,byte[] aByteArray, NativeLongByReference arraySize)
}

并使用它:

new LibAWrapper().doSomething("Hello World",....

这意味着如果Platform.jar不适合您的需求,您应该很容易在本机库周围编写一个包装器

答案 1 :(得分:2)

您可能会发现SIGAR有用

答案 2 :(得分:2)

JNA比JNI更容易使用,而且速度最慢。我强烈推荐它: JNA

答案 3 :(得分:0)

如果没有,你必须为你需要的win32 api调用编写自己的jni包装器。

答案 4 :(得分:0)

我知道这是一个较老的问题,已经得到了公认的答案,但是由于仍然有人会看一下它,因此我也会在其中加上两分钱。

正如其他人所建议的那样,JNA似乎是必经之路。由于JNA(和JNA平台)不提供所有方法的1:1映射,因此也可以编写自己的API方法。我们按照问题What is the best way to determine the number of GDI objects within a Java program?

中的描述进行操作