Error:This method must return a result of type String?

沈家大帅 2009-10-27 07:40:42
路过的高手顺便指点下我啊
先行谢过
求解Error:This method must return a result of type String

public class WaitNotifyDemo {

/**
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
MessageBoard m = new MessageBoard();//构造共享的信息板类对象
Reader readfrom_m = new Reader(m);
Writer writeto_m = new Writer(m);
readfrom_m.start();
writeto_m.start();
}

}
class MessageBoard { //共享的信息板
private String message;
private boolean ready = false;
public synchronized String read(){ //ERROR
while(ready == false){
try{
wait();
}catch(InterruptedException e){}
ready = false;
notify();
return message;
}

}
public synchronized void write(String s) {
while(ready == true){
try{
wait();
}catch(InterruptedException e){}
message = s;
ready = true;
notify();
}

}
}
class Reader extends Thread{ //定义读线程类
private MessageBoard mBoard;
public Reader(MessageBoard m){
mBoard = m;
}
public void run(){
String s = "";
boolean reading = true;
while(reading){
s = mBoard.read();
System.out.println("Reader read:"+s);
if(s.equals("logoff"))
reading = false;
}
System.out.println("Finished: 10 seconds...");
try{
sleep(10000);
}catch(InterruptedException e){}
}
}
class Writer extends Thread{ // 定义写线程类
private MessageBoard mBoard;
private String messages[] = {
"Monday :--------","....","Sunday : --------"
};
public Writer(MessageBoard m){
mBoard = m;

}
public void run(){
for(int i=0;i<messages.length;i++){
mBoard.write(messages[i]);
System.out.println("Writer wrote:"+messages[i]);
try{
sleep((int)(Math.random()*100));
}catch(InterruptedException e){}
}
mBoard.write("logoff");
}
}
...全文
939 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
沈家大帅 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaohuanjie 的回复:]
应该是catch到异常的时候也应该有返回值
[/Quote]
捕获到异常,因为无处理继续会执行下面语句
return message;
同样谢谢啦
沈家大帅 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zz578 的回复:]
read有可能执行不了return语句,必须考虑到这种情况并返回适当值。
[/Quote]
明白了, while外没有return。谢谢
xiaohuanjie 2009-10-27
  • 打赏
  • 举报
回复
对不起,我看错了

应该是catch到异常的时候也应该有返回值

惭愧........
xiaohuanjie 2009-10-27
  • 打赏
  • 举报
回复
public synchronized String read(){ //ERROR
while(ready == false){
try{
wait();
}catch(InterruptedException e){}
ready = false;
notify();
return message;
}

}

没有返回值(String),

你的这个方法的意思是只在catch到异常的时候才会return message,

如果没有异常,就不会 return一个String,这显然是不对的,

没有catch到异常也应该有返回值

public synchronized String read(){ //ERROR
while(ready == false){
try{
wait();
}catch(InterruptedException e){}
ready = false;
notify();
return message;
}
return something;
}
zz578 2009-10-27
  • 打赏
  • 举报
回复
read有可能执行不了return语句,必须考虑到这种情况并返回适当值。
告知:需要学习YOLOv4进行TT100K数据集上中国交通标志识别的学员请前往(1) Ubuntu系统《YOLOv4目标检测实战:中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/29362(2)《Windows版YOLOv4目标检测实战:中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/29363在无人驾驶中,交通标志识别是一项重要的任务。本课程中的项目以美国交通标志数据集LISA为训练对象,采用YOLOv3目标检测方法实现实时交通标志识别。具体项目过程包括包括:安装Darknet、下载LISA交通标志数据集、数据集格式转换、修改配置文件、训练LISA数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。YOLOv3基于深度学习,可以实时地进行端到端的目标检测,以速度快见长。本课程将手把手地教大家使用YOLOv3实现交通标志的多目标检测。本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入学习和探究。除本课程《YOLOv3目标检测实战:交通标志识别》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括:《YOLOv3目标检测实战:训练自己的数据集》《YOLOv3目标检测:原理与源码解析》《YOLOv3目标检测:网络模型改进方法》另一门课程《YOLOv3目标检测实战:训练自己的数据集》主要是介绍如何训练自己标注的数据集。而本课程的区别主要在于学习对已标注数据集的格式转换,即把LISA数据集从csv格式转换成YOLOv3所需要的PASCAL VOC格式和YOLO格式。本课程提供数据集格式转换的Python代码。请大家关注以上课程,并选择学习。下图是使用YOLOv3进行交通标志识别的测试结果

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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