Java Communications APIhttp://java.sun.com/products/javacomm/

解决方案 »

  1.   

    通过JNI技术, 让Java调用DLL(UNIX平台SO)中的功能函数
      

  2.   

    你要控制什么硬件?Java对硬件的访问可以使用Java对本地语言(主要是C/C++,Python也可以)的接口--JNI。另外有现成的库 JConfig 你可以试一试。
      

  3.   

    Java Communications APIhttp://java.sun.com/products/javacomm/
    我用过
      

  4.   

    Java以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决Java对本地操作的一种方法就是JNI。在有的时候我们不可以避免地进行本地操作,最常见的就是Java想访问Window本地的资源,比如想调节鼠标移动速度、改变窗体底色等等,下面就用例子来说明最简单的JNI调用。 
    Java通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使Java可以实现和本地机器的紧密联系,调用系统级的各接口方法。在本例中,首先写一个HelloWorld.java,注意这段代码出现了native关键字,可以把这段代码看成是调用本地库的桥。然后使java HelloWorld.java生成HelloWorld.class。接着生成C的头文件,这可以用jdk提供的javah命令:javah HelloWorldclass,成功运行后会出现HelloWorld.h,再编写C文件并编译成DLL, 文件名随便取,主要扩展名.c就可以,比如在本例中取名为Try.c,最后,DLL的文件名当然要是hello.dll,因为前面调入本地库时用的是System.loadLibrary("hello");。
     
    运行java HelloWorld屏幕会打印Hello world!而且伴着Beep一声。
     
    程序的完整代码如下所示:
    1.HelloWorld.java
    class HelloWorld {
        public native void displayHelloWorld();//定义本地方法
        static {
            System.loadLibrary("hello");//调入本地库
        }    
        public static void main(String[] args) {
            new HelloWorld().displayHelloWorld();
        }
    }
    2. Try.c
    #include <jni.h>
    #include "HelloWorld.h"
    #include <stdio.h>
    #include <windows.h>
    JNIEXPORT void JNICALL
    Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj){
        printf("Hello world!\n");//在这里实现java类中定义的方法
        MessageBeep(0);//调用到win本地,会发一声响
        return;
    }
     
    上面的例子提供了一种方法,通过这种方法我们就可以在Java中发挥C在Windows中的许多功能了,也就是说这里提供的是一道门,通过这道门之后具体要实现什么就要看读者想要用C实现什么了。
      

  5.   

    使用C/C++很容易编程获取硬件信息,而Java可以通过JNI调用本地方法,这就给我们提供了一种比较容易的实现方法;另一种方法就是直接用Java编程实现,这需要相关类的支持,一本好的类库参考手册会帮读者大忙的。在本节中我们只举一个简单的小例子说明如何获得本机的Mac地址。
     
    关键是使用了相关类。
     
    运行后就像在命令行下直接使用ipconfig /all一样显示出相关信息。
     
    程序的完整代码如下所示:
    import java.io.*;
    import java.net.URL;
    public class MacAddressHelper {
      public MacAddressHelper() {  
      }
      private static String getMyMac() {
          String s = "";
          try {
              String s1 = "ipconfig /all";
              Process process = Runtime.getRuntime().exec(s1);
              BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(process.getInputStream()));
              String line = bufferedreader.readLine();
              for(;line != null;) {
                  String nextLine = bufferedreader.readLine();
                  if(line.indexOf("Physical Address") > 0){
                      int i = line.indexOf("Physical Address") + 36;
                      s = line.substring(i);
                      break;
                  }
                  line = nextLine;
              }
              bufferedreader.close();
              process.waitFor();
          } catch(Exception exception) {
              s = "";
          }
          return s.trim();
      }
       public static void main(String[] args){
            System.out.println(MacAddressHelper.getMyMac());
       }
    }
     
    于硬件进行交互并不是Java的强项,然而有时候我们有需要获得相关信息,对于熟悉C/C++的程序员,可以考虑使用JNI。方法是很多的,关键是读者要发挥想象力,把各种学过的基础方法联系起来综合应用,这是需要大量的编程实践和不断的思考才能做到的。