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();
  }
 }
}

解决方案 »

  1.   

    缺包org.snmp4j.TransportMapping
    估计有包依赖于这个包 但是你没引用 编译可以过 但是运行还是找不到类的
      

  2.   

    编译你是不是在eclipse里面的啊,如果是的话,eclipse会根据工程的配置,在编译阶段把那些依赖的文件加到classpath里面,你在执行的时候可以用类似于  java -classpath lucene-demos-2.9.1.jar;lucene-core-2.9.1.jar org.apache.lucene.demo.IndexFiles   这种做法,这样在执行阶段就能找到依赖的类了
      

  3.   

    我是用editplus编辑,然后写了个bat进行编译,@echo offpath = c:\windows\system32;%~d0\Java\jdk\bin;%~d0\Java\jdk\jre\bin
    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
      

  4.   

    javac指明的classpath中没有snmp4j-2.0.2.jar
      

  5.   

    claspath。把你的jar包。添加到Java可调用处。
      

  6.   

    可能是某方法的返回类型不匹配,也会NoClassDefFound的   楼主检查下~
      

  7.   

    我怀疑是snmp4j包有问题,
    哪位朋友有可以用的,能发一个给我吗?[email protected]
      

  8.   

    调试一下bat,将最上行的off,变成on,
    然后set snmp=%cd%\lib\snmp4j-2.0.2.jar
    echo snmp
    打印出这个路径这个路径肯定有问题打出来的路径,看看下面有没有snmp4j-2.0.2.jar的包,,然后将其改正确。。
      

  9.   

    set snmp=%cd%\lib\snmp4j-2.0.2.jar
    echo snmp显示:
    H:\java\project\test\lib\snmp4j-2.0.2.jar
      

  10.   


    那你看这个路径下有snmp4j-2.0.2.jar么? 没有表示jar包找不到。
    有的话。说明Caused by: java.lang.ClassNotFoundException: org.snmp4j.TransportMapping这个错误,不是没有jar包,而是jar包中没有org.snmp4j.TransportMapping类,可能和jar版本有关,,换个版本就要
      

  11.   

    ClassNotFoundException:没有这个类...................
      

  12.   

    我下载了snmp4j-1.1.1.jar和snmp4j-2.0.2.jar,都报错,哎
      

  13.   

    http://topic.csdn.net/u/20111110/10/470b1866-74f9-4787-b906-8b744e20ff90.html?10273我重新发贴了,把目录结构和环境都详细描述了。
    问题也贴出来了。
      

  14.   

    java.lang.NoClassDefFoundError?
    LZ,问题很明显了org.snmp4j.TransportMapping  jar包没打,还是编译中类的路径指向不正确,仔细检查下!