我这LINUX下用VI 建立了一个communication.java的文件,
在里面实现了两个接口,一个类,还有一个communication的类,主函数在communication类里面。然后我运行javac communication.java来调试,提示一个ERROR。
我找找了一下,代码没有问题。把原代码复制到windows下用eclipse来调试没有出错。我想问题是不是出现在一个文件里面不能定义多个类,和接口,源代码很简单,全部放在里面,我贴出来。
 class producer implements Runnable
{
   Q q =null;
   public producer(Q q)
  {
    this.q=q;
   }
public void run()
   {
   int i=0;
   while(true)
   {
    synchronized(q)
    {
     if(i==0)
    {
      q.name="tommmmmmmmmmmm";
try
     {
       Thread.sleep(1000);
        }
     catch(Exception e)
     {
        System.out.println(e.getMessage());
      }
       q.sex="mannnnnnnnnnnnn";
    }
    else
    { q.name="annnnnnnnnnna";
    q.sex="womennnnnnnnnn";
        }
    }
     i=(i+1)%2;
   }
   }
}
class Q
{
   String name="annnnnnnnnnna";
   String sex="womennnnnnnnnn";}class consumer implements Runnable
{
   Q q=null;
  public consumer(Q q)
  {
   this.q=q;
  }
  
public  void run()
   {
    while(true)
   {
      synchronized(q)
   {
    System.out.println(q.name+"---------->>>>"+q.sex);
   }
   }
   }
}
public class threadcommunication
{
   public static void main(String [] args)
{
  Q q=new Q();
  new Thread(new producer(q)).start();
  new Thread(new consumer(q)).start();
}
}

解决方案 »

  1.   

    问题可能出现在 我不太清楚如何在LINUX下调试JAVA程序。
    以及一个文件里面,是不是能定义这么多个类,实现接口之类,以及是不是没有引用头文件之类。希望各位高手指点一下
      

  2.   

    找个eclipse在linux下调试一下,windows和linux下区别并不大,另外你可以把你的error信息贴出来看看。
      

  3.   

    一个文件中可以定义多个类,但是只能有一个public的类,并且文件的名字要和这个public类的名字相同。
    如果你的三个类都定义在一个文件中,那么类名应该是threadcommunication.java,而不是communication.java
      

  4.   

    错误信息是:
    error: cannot read: threadcommunication.java
    1  error
      

  5.   

    代码是没有错误的,因为在WINDOWS里是没有错误的,可以运行的。但是在LINUX里显示一个错误,error: cannot read: threadcommunication.java
    1  error 我想可能是LINUX编译的条件要求之类的
      

  6.   

    你的linux上安装没有安装jdk? 不要使用系统默认带的那个,那个有些问题。
      

  7.   

    有装JDK阿。/USR/JAVA目录里,一个JDK,一个JRE
      

  8.   

    那你有没有设置java_home,classpath,path等环境变量,确认你使用的正确的jdk
      

  9.   

    都设置好了阿。我可以运行,并且输出HELLOWORLD 程序。但是这个程序,编译都不行。。
      

  10.   

    确定你的权限
    实在不知道JRE的权限,尝试把文件设成777
      

  11.   

    我用 ROOT权限 执行的。
      

  12.   

    error: cannot read: threadcommunication.java 
    你告诉我 你这个错误是LINUX提示的还是JRE提示的
    cannot read
    看上去貌似是权限
      

  13.   

    是 运行 javac threadcommunication.java后出来的错误。
      

  14.   

    把你的文件在windows记事本中ACSII格式重新保存一下,再复制到linux上试一下
      

  15.   

    应该没有毛病
    另外为什么我 要 经常 输入source /etc/profile命令,
      

  16.   

    楼主肯定是权限问题,我把楼主的程序改名为threadcommunication.java在ununtu,jdk1.6下编译成功。可以运行。
      

  17.   

    经常需要输入source /etc/profile应该是没有设置好root用户的环境变量。
      

  18.   


    我执行是用ROOT权限执行的阿
      

  19.   


    export java_home=/usr/java/j2sdk1.4.2_16
    export CLASSPATH=.:$java_home/lib/dt.jar
    export PATH=$java_home/bin:$java_home/jre/bin:$PATH我的环境变量设置
      

  20.   

    怎么样解决权限问题,另外如何不再一直使用 source /etc/profile命令