又出问题了!

horse_leo_zhcn 2011-05-22 10:21:49
class Computer
{
String name = "电脑主机";
boolean flag = false;
public synchronized void set(String name)
{
if(!flag)
try
{
super.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
this.setName(name);
flag = false;
super.notify();
}
public synchronized void get(String name)
{
if(flag)
try
{
super.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println(this.getName());
flag = true;
super.notify();
}
public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
}
class Producer implements Runnable
{
Computer computer = null;
public Producer(Computer computer)
{
this.computer = computer;
}
public void run()
{
boolean flag = false;
for(int i=0;i<10;i++)
{
if(flag)
{
this.computer.set("电脑主机");
flag = false;
}
else
{
this.computer.set("显示器");
flag = true;
}

}
}
}
class Consumer implements Runnable
{
Computer computer = null;
public Consumer(Computer computer)
{
this.computer = computer;
}
public void run()
{
for(int i=0;i<10;i++)
try
{
Thread.sleep(100);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
this.computer.getName();
}
}

public class ComputerTest
{
public static void main(String[] args)
{
Computer comp = new Computer();
Producer pro = new Producer(comp);
Consumer con = new Consumer(comp);
new Thread(pro).start();
new Thread(con).start();
}

}

出现下列提示:
F:\>javac ComputerTest.java
javac: 找不到文件: ComputerTest.java
用法: javac <options> <source files>
-help 用于列出可能的选项

本来就是放在f盘根目录先的嘛,怎么会提示找不到呢?
...全文
179 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
t505080 2011-05-23
  • 打赏
  • 举报
回复
Producer类run方法里的flag不能改变Computer类里的成员变量flag的值.
在run方法里 flag不论ture或者false
this.computer.set()方法中都走
if (!flag)
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
因为,这里的flag为computer的flag变量,总是flase.所以,一直wait().
fengyong_java 2011-05-23
  • 打赏
  • 举报
回复
执行this.computer.set("显示器");
这句时,进入下面的set方法,
下面的flag=ture没有执行所以flag=false;
所以会执行super.wait(); 一直等待 直到重新获取对象锁

this.computer.set("显示器");
flag = true;

public synchronized void set(String name) {
if (!flag)
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName());
flag = true;
super.notify();
}
leebeen34 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xcmcc 的回复:]
补充:
编译通过了,但是在Eclipse中没有任何反应
在dos下提示如下错误:
[/Quote]
可能是你没有配置jdk,所以在其他地方编译失败,只能通过eclipse编译
learningl 2011-05-23
  • 打赏
  • 举报
回复
你试下可对,我也不是很熟悉java
learningl 2011-05-23
  • 打赏
  • 举报
回复

import java.util.LinkedList;
import java.util.List;

class Computer
{
private List<String> products = new LinkedList<String>();
private boolean isWait = false;

public String get()
{
if (products.isEmpty())
{
isWait = true;
try
{
synchronized (this)
{
super.wait();
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
if (products.isEmpty())
{
return null;
}
String str = products.get(0);
products.remove(0);
return str;
}

public void set(String host)
{
products.add(host);
if (isWait)
{
synchronized (this)
{
super.notifyAll();
}
}
}
}

class Producer implements Runnable
{
private Computer computer;

public Producer(Computer computer)
{
this.computer = computer;
}

public void run()
{
boolean flag = false;
for (int i = 0; i < 10; i++)
{
if (flag)
{
this.computer.set("电脑主机" + i);
}
else
{
this.computer.set("显示器" + i);
}
flag = !flag;
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

class Consumer implements Runnable
{
private Computer computer;

public Consumer(Computer computer)
{
this.computer = computer;
}

public void run()
{
for (int i = 0; i < 10; i++)
{
System.out.println(computer.get());
}
}
}

public class Hello
{
public static void main(String[] args)
{
Computer co = new Computer();
Producer pro = new Producer(co);
Consumer con = new Consumer(co);
new Thread(pro).start();
new Thread(con).start();
}
}

horse_leo_zhcn 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 t505080 的回复:]
Producer类run方法里的flag不能改变Computer类里的成员变量flag的值.
在run方法里 flag不论ture或者false
this.computer.set()方法中都走
if (!flag)
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
因为,这……
[/Quote]

原题是这样的:

设计一个生产电脑和搬运电脑的类,要求成产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工就要等待新电脑产出,如果生产出的电脑没有搬走,则要等待电脑搬走之后在生产。

请您帮我把整个程序写出来,我想参考参考

谢谢了
TKD03072010 2011-05-22
  • 打赏
  • 举报
回复
程序逻辑程序,Computer里面的set跟get方法!
horse_leo_zhcn 2011-05-22
  • 打赏
  • 举报
回复
再补充
编译和执行都通过了,就是没有任何输出!!!
怎么回事???
horse_leo_zhcn 2011-05-22
  • 打赏
  • 举报
回复
补充:
编译通过了,但是在Eclipse中没有任何反应
在dos下提示如下错误:
F:\>java ComputerTest
Exception in thread "main" java.lang.NoClassDefFoundError: ComputerTest (wrong n
ame: com/test/ComputerTest)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: ComputerTest. Program will exit.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧