java代码如下:package com.broada.srvmonitor.impl.apusic;import java.io.IOException;
import java.util.Hashtable;import javax.jms.TopicConnectionFactory;
import javax.management.MBeanServerConnection;
import javax.management.remote.rmi.RMIConnector;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;public class ApusicManager { private RMIConnector rmic; private String ipAddr; private int port; private String name; private String password; private Context context;
private MBeanServerConnection connection; public ApusicManager(String ipAddr, int port, String name, String password) {
this.ipAddr = ipAddr;
this.port = port;
this.name = name;
this.password = password;
} public void init() throws NamingException, IOException {
if (context == null)
initialContext();
try {
rmic = (RMIConnector) context.lookup("jmx/rmi/RMIConnector");
rmic.connect();
} catch (NamingException e) {
closeContext();
throw e;
} catch (Throwable e) {
NamingException ne = new NamingException("获取RMI连接失败.");
ne.setRootCause(e);
46行---- closeContext();
throw ne;
} finally {
closeContext();
}
} private void initialContext() throws NamingException {
Hashtable env = new Hashtable();
String url = "iiop://" + ipAddr + ":" + port;
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.apusic.naming.jndi.CNContextFactory");
env.put(Context.PROVIDER_URL, url);
env.put("java.naming.security.principal", name);
env.put("java.naming.security.credentials", password);
context = new InitialContext(env);
} public String getIpAddr() {
return ipAddr;
} public void setIpAddr(String ipAddr) {
this.ipAddr = ipAddr;
} public int getPort() {
return port;
} public void setPort(int port) {
this.port = port;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public MBeanServerConnection getConnection() throws NamingException, IOException {
if (context == null)
initialContext();
rmic = (RMIConnector) context.lookup("jmx/rmi/RMIConnector");
rmic.connect();
connection = rmic.getMBeanServerConnection();
return connection;
} public void closeContext() throws IOException { if (rmic != null) {
107行---- rmic.close();
rmic = null;
}
if (context != null) {
try {
context.close();
context = null;
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}
测试连接时出现的异常如下:
Java.lang.NullPointerException
at javax.management.remote.rmi.RMIConnector.close(RMIConnector.java:474)
at javax.management.remote.rmi.RMIConnector.close(RMIConnector.java:400)
at com.broada.srvmonitor.impl.apusic.ApusicManager.closeContext(ApusicManager.java:107)
at com.broada.srvmonitor.impl.apusic.ApusicManager.init(ApusicManager.java:46)
at com.broada.srvmonitor.monitormethod.config.apusic.ApusicParamPanel$1.actionPerformed(ApusicParamPanel.java:85)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:153)
at java.awt.Dialog$1.run(Dialog.java:535)
at java.awt.Dialog$2.run(Dialog.java:565)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:563)
at com.broada.srvmonitor.config.MonitorNodeTreePanel$TreeProcessMenu$ModifyActionListener.actionPerformed(MonitorNodeTreePanel.java:1064)
但是使用Jconsole连接时正常的
...各位大侠帮帮忙啊