求助,java如何调用ocx控件里的事件?
以下是ocx控件的使用说明:
1.打开初始化:
txUDP1.UDPConnect()
返回值:
 0。说明成功
 1。说明失败:原因可能是端口已被其它设备用或禁用
‘出错返回错信息
2.结束关闭
txUDP1.UDPclose
3.取得数据事件
txUDP1_UDPdata
-------------------------------
'5种状态:-----标符(状态),来电号码,用户名/线路号码,通道,E(结束符)
'第1种来电号码:M,075526664777,26664777,01,E
'第2种去电号码:T,075526664777,26664777,01,E
'第3种来电摘机:A,,26664777,01,E(在来电时有效用于通道状态)
'第4种挂机:    B,,26664777,01,E
'第5种未接电话: X,,26664777,01,E
使用jacob调用时,里面的方法能够调用成功,但事件却不能激活。
以下是我的代码:
public static void main(String[] args) {
		JFrame f = new JFrame();
		JTextArea ta = new JTextArea();
		f.add(ta);
		f.setSize(400, 500);
		f.setVisible(true);
		ActiveXComponent com = new ActiveXComponent("txUDPOCX.txUDP");
		Dispatch disp = com.getObject();
		// 初始化--0表示成功1表示失败
		System.out.println(Dispatch.call(disp, "UDPConnect"));
		Listener listener = new Listener();
		listener.setTa(ta);
		// 监听事件
		DispatchEvents de = new DispatchEvents(disp, listener,"txUDPOCX.txUDP");
		//Dispatch.call(disp, "UDPclose");
	}
事件中的代码:
public class Listener {
	JTextArea ta;
	public JTextArea getTa() {
		return ta;
	}
	public void setTa(JTextArea ta) {
		this.ta = ta;
	}
	public void txUDP1_UDPdata(Variant[] txUDP1_UDPdata) {
		ta.append("aaaa");
	}
}
是不是那里写错了呢?求大神指点……
              
              
------解决方案--------------------import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.DispatchEvents;
import com.jacob.com.Variant;
import 
java.io.IOException;
public class ocx {
	public ocx() {
	ComThread.InitMTA(true);
	ActiveXComponent iTunesCom = new ActiveXComponent("clsid:287B48B3-80CA-4D0A-AE8E-F97A824FF279");
	Dispatch testOcx = (Dispatch)iTunesCom.getObject();
	Dispatch.call(testOcx, "BaseConnect",new Variant("COM3"),new Variant("1,3-5"));
	Dispatch.call(testOcx, "VoteNew");
	Dispatch.call(testOcx, "VoteMode",new Variant("5"),new Variant("1,4,1"));
	Dispatch.call(testOcx, "VoteStart");
	DispatchEvents events = new DispatchEvents(testOcx, new KeyVoteA());
	try {
		System.in.read();
	} catch (
IOException e) {}
		ComThread.Release();
		System.exit(0);
	}
	
	public class KeyVoteA {
		//ocx事件返回给java类参数取得
		public void KeyVote(Variant[] args) {
	         System.out.println("args[0][   "+args[0].getInt());
	         System.out.println("args[1][   "+args[1].getInt());
	         System.out.println("args[2][   "+args[2].getString());
	   }
	}
	
	public static void main(String args[]) throws Exception {
	    ocx test = new ocx();
	}
}
------解决方案--------------------可能与dll的调法差不多,编译生成存根,代理。也可以用OBJECT classid="clsid:CAFEEFAC-0015-0000-0007-ABCDEFFEDCBA>这种方式调用