金华一剑律师事务所 黄:JAVA怎样调用客户端应用程序?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 03:25:10
我用一下代码调用客户端应用程序:
function exec (command) {
window.oldOnError = window.onerror;
window._command = command;
window.onerror = function (err) {
if (err.indexOf('utomation') != -1) {
alert('命令' + window._command + ' 已经被用户禁止!');
return true;
}
else return false;
};
var wsh = new ActiveXObject('WScript.Shell');
if (wsh)
wsh.Run(command);
window.onerror = window.oldOnError;
}
但是,出现了两个问题,1、如果浏览器安全级别比较高,调用就会失败。2、如果客户端程序有配置文件,它就会找不到当前目录。(它总是把当前目录定位在“c:\...\桌面”上。求各位高手帮助解决。
再就是命令中不能有空格和中文。
可以在网页中直接使用吗?

activeX受限于安全设置,你可以试试Runtime.exec
以下是一个简单类的范例,展示了调用本地ls命令的情形:

import java.io.BufferedInputStream;
import java.io.IOException;

public class ExecLs {

static public void main(String[] args) {
String cmd = "ls"

try {
Process ps = Runtime.getRuntime().exec(cmds);
System.out.print(loadStream(ps.getInputStream()));
System.err.print(loadStream(ps.getErrorStream()));
} catch(IOException ioe) {
ioe.printStackTrace();
}
}

// read an input-stream into a String
static String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();
while( (ptr = in.read()) != -1 ) {
buffer.append((char)ptr);
}
return buffer.toString();

}

}

还可以利用java里面的native关键字。其用于声明本地代码方法。一旦声明,这些方法就能够象你调用其他java方法一样被你的java程序调用。在方法前加上native修饰符,但是不要定义方法的任何实体。如:

public native in meth();

还是用一个简单的调用DLL的例子来说明:

public class NativeDemo {

/**
* @param args
*/
int i;

public static void main(String[] args) {
// TODO Auto-generated method stub
NativeDemo ob=new NativeDemo();

ob.i=10;
System.out.println("This is ob.i before the native method:"+ob.i);
ob.test();
System.out.println("This is bo.i after the native method:"+ob.i);

}

//申明方法
public native void test();

//指定Dll文件
static{
System.loadLibrary("NativeDemo");
}

}

没有办法..

用applet。这样不会收到限制。