当它作为Java代码正常运行时,它工作得很好,但是当它作为应用程序运行时,queueManager显示NULL。所有这些代码都放在onCreate(Bundle savedInstanceState)中。当它作为java运行时,调试器实际上显示出queueManager值。
void init() {
int openOptions = CMQC.MQOO_INQUIRE | CMQC.MQOO_INPUT_AS_Q_DEF;
MQEnvironment.hostname = HOST;
MQEnvironment.channel = CHANNEL;
MQEnvironment.port = PORT;
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
MQEnvironment.properties.put(CMQC.THREAD_AFFINITY_PROPERTY, new Boolean(true));
try {
queueManager = new MQQueueManager(QMGR);
System.out.println("Successfully connected to " + queueManager.getName());
defaultQueue = queueManager.accessQueue(QUEUE_NAME,openOptions);
System.out.println("Queue size: " + defaultQueue.getCurrentDepth());
} catch (MQException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
System.exit(2);
}
finally {
try {
if (queueManager != null);
queueManager.disconnect();
} catch (MQException e) {
e.printStackTrace();
}
try {
if (defaultQueue != null);
defaultQueue.close();
} catch (MQException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
MQEnvironment是外部库吗?如果是,您是否已将其导入到Android项目?
答案 1 :(得分:0)
(1)正如我在这里多次张贴的那样,请勿使用MQEnvironment类,因为它不是线程安全的。将连接信息放入Hashtable中,然后将Hastable传递给MQQueueManager类。有关我所讨论内容的示例,请参见here。
(2)放入“ System.exit(2);”代码中间的格式错误,这意味着将不会调用finally子句。因此,该代码将使队列保持打开状态并连接到队列管理器。
(3)在您的finally子句中,您具有向后“断开连接”和“关闭”的功能。与队列管理器断开连接之前,必须先 关闭队列。