求助,java如何调用ocx控件里的事件?

a450119215 2012-09-26 07:52:53
以下是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");
}
}

是不是那里写错了呢?求大神指点……
...全文
634 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nexus_2 2013-11-21
  • 打赏
  • 举报
回复
引用 9 楼 George_solo 的回复:
引用 6 楼 u011384516 的回复:
这种方式根本就是没反应的
兄台,我也出现这样的问题了 还望指教一二,QQ:97604448
兄弟,我也不会,没做出来,后来放弃了,这得需要JAVA开发和OCX开发工程师之间共同开发联调测试,不然的话,不匹配的不支持的永远也做不出来。
George_solo 2013-11-05
  • 打赏
  • 举报
回复
引用 6 楼 u011384516 的回复:
这种方式根本就是没反应的
兄台,我也出现这样的问题了 还望指教一二,QQ:97604448
nexus_2 2013-08-01
  • 打赏
  • 举报
回复
引用 7 楼 pichunhan 的回复:
jacob监听连续9次事件就监听不到了,要等返回之后一段时间才可以继续返回,是肿么一回事啊
楼上大神是怎么监听的?可以贴demo代码不?
pichunhan 2013-07-30
  • 打赏
  • 举报
回复
jacob监听连续9次事件就监听不到了,要等返回之后一段时间才可以继续返回,是肿么一回事啊
nexus_2 2013-07-30
  • 打赏
  • 举报
回复
这种方式根本就是没反应的
a450119215 2013-03-22
  • 打赏
  • 举报
回复
谢谢各位大神!
zhanghua4109 2013-01-28
  • 打赏
  • 举报
回复
可能与dll的调法差不多,编译生成存根,代理。也可以用OBJECT classid="clsid:CAFEEFAC-0015-0000-0007-ABCDEFFEDCBA>这种方式调用
guoruijun_2012_4 2013-01-28
  • 打赏
  • 举报
回复
DispatchEvents events = new DispatchEvents(testOcx, new 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()); } 理解红色字体即可
guoruijun_2012_4 2013-01-28
  • 打赏
  • 举报
回复
参照代码中注释部分
guoruijun_2012_4 2013-01-28
  • 打赏
  • 举报
回复
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(); } }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧