H:\Java\Project\test>run
Exception in thread "main" java.lang.NoClassDefFoundError: org/snmp4j/TransportMapping
Caused by: java.lang.ClassNotFoundException: org.snmp4j.TransportMapping
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: SnmpExample. Program will exit.
为什么编译通过,运行的时候总是报这个错误呀?============================================================================================
import java.io.IOException;import org.snmp4j.*;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.event.ResponseListener;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.*;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;public class SnmpExample {
private Snmp snmp = null;
private String version=null;
/**
*
* @param version
*/
public SnmpExample(String version) {
try {
this.version=version;
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
if(version.equals("3"))
{
//设置安全模式
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
}
//开始监听消息
transport.listen();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @param syn 是否是同步模式
* @param bro 是否是广播
* @param pdu 要发送的报文
* @param addr 目标地址
* @throws IOException
*/
public void sendMessage(Boolean syn, final Boolean bro, PDU pdu,
String addr) throws IOException {
//生成目标地址对象
Address targetAddress = GenericAddress.parse(addr);
Target target=null;
if(version.equals("3"))
{
//添加用户
snmp.getUSM().addUser(
new OctetString("MD5DES"),
new UsmUser(new OctetString("MD5DES"), AuthMD5.ID,
new OctetString("MD5DESUserAuthPassword"), PrivDES.ID,
new OctetString("MD5DESUserPrivPassword")));
target = new UserTarget();
//设置安全级别
((UserTarget)target).setSecurityLevel(SecurityLevel.AUTH_PRIV);
((UserTarget)target).setSecurityName(new OctetString("MD5DES"));
target.setVersion(SnmpConstants.version3);
}else{
target=new CommunityTarget();
if(version.equals("1"))
{
target.setVersion(SnmpConstants.version1);
((CommunityTarget) target).setCommunity(new OctetString("public"));
}else{
target.setVersion(SnmpConstants.version2c);
((CommunityTarget) target).setCommunity(new OctetString("public"));
}
}
// 目标对象相关设置
target.setAddress(targetAddress);
target.setRetries(5);
target.setTimeout(1000);
if (syn.equals(true)) {
//发送报文 并且接受响应
ResponseEvent response = snmp.send(pdu, target);
//处理响应
System.out.println("Synchronize message from "
+ response.getPeerAddress() + "\nrequest:"
+ response.getRequest() + "\nresponse:"
+ response.getResponse());
} else {
//设置监听对象
ResponseListener listener = new ResponseListener() { @Override
public void onResponse(ResponseEvent event) {
// TODO Auto-generated method stub
if (bro.equals(false)) {
((Snmp) event.getSource()).cancel(event.getRequest(),
this);
}
//处理响应
PDU request = event.getRequest();
PDU response = event.getResponse();
System.out.println("Asynchronise message from "
+ event.getPeerAddress() + "\nrequest:" + request
+ "\nresponse:" + response);
} };
//发送报文
snmp.send(pdu, target, null, listener);
}
} public static void main(String[] args) {
SnmpExample manager = new SnmpExample("2c");
//构造报文
PDU pdu = new PDU();
// PDU pdu = new ScopedPDU();
//设置要获取的对象ID
OID oids=new OID("1.3.6.1.2.1.1.1.0");
pdu.add(new VariableBinding(oids));
//设置报文类型
pdu.setType(PDU.GETNEXT);
// ((ScopedPDU) pdu).setContextName(new OctetString("priv"));
try {
//发送消息 其中最后一个是想要发送的目标地址
manager.sendMessage(false, true, pdu, "udp:192.168.2.249/161");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Exception in thread "main" java.lang.NoClassDefFoundError: org/snmp4j/TransportMapping
Caused by: java.lang.ClassNotFoundException: org.snmp4j.TransportMapping
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: SnmpExample. Program will exit.
为什么编译通过,运行的时候总是报这个错误呀?============================================================================================
import java.io.IOException;import org.snmp4j.*;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.event.ResponseListener;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.*;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;public class SnmpExample {
private Snmp snmp = null;
private String version=null;
/**
*
* @param version
*/
public SnmpExample(String version) {
try {
this.version=version;
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
if(version.equals("3"))
{
//设置安全模式
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
}
//开始监听消息
transport.listen();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @param syn 是否是同步模式
* @param bro 是否是广播
* @param pdu 要发送的报文
* @param addr 目标地址
* @throws IOException
*/
public void sendMessage(Boolean syn, final Boolean bro, PDU pdu,
String addr) throws IOException {
//生成目标地址对象
Address targetAddress = GenericAddress.parse(addr);
Target target=null;
if(version.equals("3"))
{
//添加用户
snmp.getUSM().addUser(
new OctetString("MD5DES"),
new UsmUser(new OctetString("MD5DES"), AuthMD5.ID,
new OctetString("MD5DESUserAuthPassword"), PrivDES.ID,
new OctetString("MD5DESUserPrivPassword")));
target = new UserTarget();
//设置安全级别
((UserTarget)target).setSecurityLevel(SecurityLevel.AUTH_PRIV);
((UserTarget)target).setSecurityName(new OctetString("MD5DES"));
target.setVersion(SnmpConstants.version3);
}else{
target=new CommunityTarget();
if(version.equals("1"))
{
target.setVersion(SnmpConstants.version1);
((CommunityTarget) target).setCommunity(new OctetString("public"));
}else{
target.setVersion(SnmpConstants.version2c);
((CommunityTarget) target).setCommunity(new OctetString("public"));
}
}
// 目标对象相关设置
target.setAddress(targetAddress);
target.setRetries(5);
target.setTimeout(1000);
if (syn.equals(true)) {
//发送报文 并且接受响应
ResponseEvent response = snmp.send(pdu, target);
//处理响应
System.out.println("Synchronize message from "
+ response.getPeerAddress() + "\nrequest:"
+ response.getRequest() + "\nresponse:"
+ response.getResponse());
} else {
//设置监听对象
ResponseListener listener = new ResponseListener() { @Override
public void onResponse(ResponseEvent event) {
// TODO Auto-generated method stub
if (bro.equals(false)) {
((Snmp) event.getSource()).cancel(event.getRequest(),
this);
}
//处理响应
PDU request = event.getRequest();
PDU response = event.getResponse();
System.out.println("Asynchronise message from "
+ event.getPeerAddress() + "\nrequest:" + request
+ "\nresponse:" + response);
} };
//发送报文
snmp.send(pdu, target, null, listener);
}
} public static void main(String[] args) {
SnmpExample manager = new SnmpExample("2c");
//构造报文
PDU pdu = new PDU();
// PDU pdu = new ScopedPDU();
//设置要获取的对象ID
OID oids=new OID("1.3.6.1.2.1.1.1.0");
pdu.add(new VariableBinding(oids));
//设置报文类型
pdu.setType(PDU.GETNEXT);
// ((ScopedPDU) pdu).setContextName(new OctetString("priv"));
try {
//发送消息 其中最后一个是想要发送的目标地址
manager.sendMessage(false, true, pdu, "udp:192.168.2.249/161");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
估计有包依赖于这个包 但是你没引用 编译可以过 但是运行还是找不到类的
set java_home = %~d0\Java\jdk\
set classpath = .;%java_home%\lib;%cd%\lib;%cd%\bin;%java_home%\lib\tools.jar;%java_home%\lib\dt.jar;%cd%\lib\snmp4j-2.0.2.jarjavac src\*.java -d bin -classpath .;%java_home%\lib;%cd%\lib;%java_home%\lib\tools.jar;%java_home%\lib\dt.jar;%cd%\lib\snmp4j-2.0.2.jar;%cd%\lib\log4j-1.2.9.jar -Xlint:unchecked
哪位朋友有可以用的,能发一个给我吗?[email protected]
然后set snmp=%cd%\lib\snmp4j-2.0.2.jar
echo snmp
打印出这个路径这个路径肯定有问题打出来的路径,看看下面有没有snmp4j-2.0.2.jar的包,,然后将其改正确。。
echo snmp显示:
H:\java\project\test\lib\snmp4j-2.0.2.jar
那你看这个路径下有snmp4j-2.0.2.jar么? 没有表示jar包找不到。
有的话。说明Caused by: java.lang.ClassNotFoundException: org.snmp4j.TransportMapping这个错误,不是没有jar包,而是jar包中没有org.snmp4j.TransportMapping类,可能和jar版本有关,,换个版本就要
问题也贴出来了。
LZ,问题很明显了org.snmp4j.TransportMapping jar包没打,还是编译中类的路径指向不正确,仔细检查下!