下面这个程序编译未出错,但运行后就出现异常信息:"Exception in thread "main" java.lang.NoClassDefFoundError: c:\java\UseWaitNotify",我的java是1.6版本,环境变量设置也包含了tools.jar和dt.jar这两个包,请问问题倒底出在哪里????????
import java.io.*;public class UseWaitNotify{
public static void main(String[] args){
MsgSender s = new MsgSender();
Thread t1 = new Thread(s);
MsgReceiver r = new MsgReceiver(s);
Thread t2 = new Thread(r);
t2.setDaemon(true);
t1.start();
t2.start();
try{
t1.join();
while(s.flag){
Thread.sleep(100);
}
}
catch(InterruptedException e){
System.out.println(e.toString());
}
try{
int ch = System.in.read();
}catch(IOException e){}
}
}class MsgSender implements Runnable{
char data;
boolean flag;
public void run(){
synchronized(this){
while(flag){
try{
this.wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
data = 'A';
System.out.println("发送的数据是:"+data);
synchronized(this){
flag = true;
this.notify();
}
}
}
}class MsgReceiver implements Runnable{
MsgSender sender;
public MsgReceiver(MsgSender sender){
this.sender = sender;
}
public void run(){
while(true){
synchronized(sender){
while(!sender.flag){
try{
sender.wait();
}
catch(InterruptedException e){
System.out.println(e.toString());
}
}
}
System.out.println("接收的数据是:"+sender.data);
synchronized(sender){
sender.flag = false;
sender.notify();
}
}
}
}

解决方案 »

  1.   

    你是说把Msgsender和Msgreceiver类前加修饰符private???
    我试了,没用!
      

  2.   

    你的程序没有任何问题,我测试过了,可以,
    Exception in thread "main" java.lang.NoClassDefFoundError
    1,可能是由于你的java文件不是UseWaitNotify.java
    2,可能就是你环境变量的问题----------------------------------
    javac UseWaitNotify.java
    java UseWaitNotify
    发送的数据是:A
    接受的数据是:A
      

  3.   

    参考:
    JAVA_HOME C:\Program Files\Java\jdk1.6.0_03
    CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
    PATH 中在添加;%JAVA_HOME%\jre\bin就可以了,
    你也可以从网上随便找一下环境配置