A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class  demo
{
public static void main(String[] args)
{
  R r =new R();
  la in=new la(r);
  yun to=new yun(r);
  Thread t1=new Thread(in);
  Thread t2=new Thread(to);
  t1.start();
  t2.start();
}
}
class R
{
private String name;
private int gonghao=1;
private boolean biaoji;
public synchronized void lajin(String name)
{
  while(biaoji)
  {
   try
   {
    this.wait();
   }
   catch(Exception e)
   {
   }
   
  }
  this.name=name+"...."+gonghao++;
  System.out.println(Thread.currentThread().getName()+"...拉煤者..."+this.name);
  biaoji=true;
  this.notifyAll();
}
public synchronized void lachu()
{
   while(!biaoji)
   {
    try
    {
     this.wait();
    }
    catch(Exception e)
    {
    }
   
   }
  System.out.println(Thread.currentThread().getName()+"...运走煤者..."+this.name);
  biaoji=false;
  this.notifyAll();
}

}
class la implements Runnable
{
private R r;
la(R r)
{
  this.r=r;
}
public void run()
{
  while (true)
  {
   R.lajin("煤");
  }
}
}
class yun implements Runnable
{
private R r;
yun(R r)
{
  this.r=r;
}
public void run()
{
  while (true)
  {
   R.lachu();
  }
}
}

---------------------------------------------------------------------------------------------下面是编译器报的错误,我感觉我代码没问题啊:Q
lamei01.java:72: 错误: 无法从静态上下文中引用非静态 方法 lajin(String)
                        R.lajin("煤");
                         ^
lamei01.java:87: 错误: 无法从静态上下文中引用非静态 方法 lachu()
                        R.lachu();

6 个回复

倒序浏览
把非静态改成静态就好了,或者创建对象,在调用,都可以
回复 使用道具 举报
pengyu1801 发表于 2014-8-12 15:49
把非静态改成静态就好了,或者创建对象,在调用,都可以

对象已经创建了啊 ,要是改为静态 怎么改 这代码就整个错了啊
回复 使用道具 举报
pengyu1801 发表于 2014-8-12 15:49
把非静态改成静态就好了,或者创建对象,在调用,都可以

你看我写的主函数,我已经创建了我要引用的 R的对象 并且 把对象又传给了 实现 Runnable 类里的方法,我又写了一遍 还是这样的错误 无语了
回复 使用道具 举报
我自己找出来,我知道我错在哪了! 我不该用类名调用 .....:L
回复 使用道具 举报
梦里听传说 发表于 2014-8-12 16:13
我自己找出来,我知道我错在哪了! 我不该用类名调用 .....

              嗯嗯。。
回复 使用道具 举报
More 中级黑马 2014-8-12 18:20:17
7#
不就是静态的问题吗  你把变量找到看看就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马