我用JACOB实现了Java对OCX组件的调用,Java能成功调用OCX里面的方法,但是对OCX里面的事件响应却出现了问题,如果OCX组件里的事件没有传出参数则Java可以正常接收到事件,可是当OCX的事件有返回参数时就无法响应了,我对Java事件机制不了解,Jacob这东西也是刚接触,可能是我的代码出现了问题,下面是一些示例代码,望高人指点。import com.jacob.com.*;
import com.jacob.activeX.*;
import java.io.*;
public class Test { ActiveXComponent comx=new ActiveXComponent("ZKFPEngXControl.ZKFPEngX"); //myCom.com
Dispatch ob = comx.getObject();
public void initTest()
{
Variant var = Dispatch.call(ob, "InitEngine");
if(var.getInt()==0)
{
Variant valid = Dispatch.get(ob, "EngineValid");
if(valid.getBoolean())
{
Variant sn = Dispatch.get(ob, "SensorSN");
System.out.println(sn.toString());
SensorEvents se = new SensorEvents();
DispatchEvents de = new DispatchEvents(ob,se,"ZKFPEngXControl.ZKFPEngX"); Dispatch.call(ob, "BeginEnroll");
try {
Thread.sleep(5000);
} catch (Exception e) {
} Dispatch.call(ob, "SaveJPG","c:\\finger.jpg");
Dispatch.call(ob,"EndEngine");
}
}
} public static void main(String[] args){
Test test = new Test();
test.initTest();
}
}
事件方法类SensorEvents import com.jacob.com.Variant;public class SensorEvents { //ocx事件 OnFingerTouching 无参数返回
public void OnFingerTouching(Variant[] args) {
System.out.println("OnFingerTouching");
}
//ocx事件 OnFingerLeaving 无参数返回
public void OnFingerLeaving(Variant[] args) {
System.out.println("OnFingerLeaving");
}
/*
ocx事件 OnEnroll(ActionResult As Boolean,ATemplate)
返回参数ActionResult,ATemplate请问有参数的事件怎么写它的java方法?
*/
public __ OnEnroll() {
//如何写?
}}
import com.jacob.activeX.*;
import java.io.*;
public class Test { ActiveXComponent comx=new ActiveXComponent("ZKFPEngXControl.ZKFPEngX"); //myCom.com
Dispatch ob = comx.getObject();
public void initTest()
{
Variant var = Dispatch.call(ob, "InitEngine");
if(var.getInt()==0)
{
Variant valid = Dispatch.get(ob, "EngineValid");
if(valid.getBoolean())
{
Variant sn = Dispatch.get(ob, "SensorSN");
System.out.println(sn.toString());
SensorEvents se = new SensorEvents();
DispatchEvents de = new DispatchEvents(ob,se,"ZKFPEngXControl.ZKFPEngX"); Dispatch.call(ob, "BeginEnroll");
try {
Thread.sleep(5000);
} catch (Exception e) {
} Dispatch.call(ob, "SaveJPG","c:\\finger.jpg");
Dispatch.call(ob,"EndEngine");
}
}
} public static void main(String[] args){
Test test = new Test();
test.initTest();
}
}
事件方法类SensorEvents import com.jacob.com.Variant;public class SensorEvents { //ocx事件 OnFingerTouching 无参数返回
public void OnFingerTouching(Variant[] args) {
System.out.println("OnFingerTouching");
}
//ocx事件 OnFingerLeaving 无参数返回
public void OnFingerLeaving(Variant[] args) {
System.out.println("OnFingerLeaving");
}
/*
ocx事件 OnEnroll(ActionResult As Boolean,ATemplate)
返回参数ActionResult,ATemplate请问有参数的事件怎么写它的java方法?
*/
public __ OnEnroll() {
//如何写?
}}
OnImageReceived
OnFingerTouching
OnFingerLeaving
其他的事件都触发不了,不清楚什么原因
后改用C#完成程序,基本能满足项目要求