回 帖 发 新 帖 刷新版面

主题:请高手指出以下程序哪里错了,应该怎么改

我是想用多线程实现一边键盘输入,一边输出,同步运行,但是java告诉我Sender中的 run()无法实现java.lang.Runnable中的run();被覆盖的BufferLock.java  
程序如下
import java.io.*;
public class BufferLock
{   
    private int j=0;
    private byte value;
    private boolean isEmpty=true;
    public synchronized void put(byte i[]) throws IOException
    {    
        
        while(!isEmpty)
        {
            try
            {
                this.wait();
            }
            catch(InterruptedException e){}
        }
        value=i[j];
        j++;
        isEmpty=false;
        notify();
    }
    public synchronized byte get()
    {
        while(isEmpty)
        {
            try
            {
                this.wait();
            }
            catch(InterruptedException e){}
        }
        isEmpty=true;
        notify();
        return value;
    }
}

class Sender extends Thread 
{
    private BufferLock buffer;
    public Sender(BufferLock buffer)
    {
        this.buffer=buffer;
    }
    public void run() throws IOException
    {   byte i[]=new byte[512];
        while(true)
        {
            System.in.read(i);
             buffer.put(i);
            System.out.println("Sender put:"+i);
        }
    }
}

class Receiver extends Thread 
{
    private BufferLock buffer;
    public Receiver(BufferLock buffer)
    {
        this.buffer=buffer;    
    }
    public void run()
    {
        for(;;)
            System.out.println("\t\t\t Receiver get:"+buffer.get());
    }

    public static void main(String args[]) throws IOException
    {
        BufferLock buffer=new BufferLock();
        (new Sender(buffer)).start();
        (new Receiver(buffer)).start();
    }
}

回复列表 (共4个回复)

沙发

public void run() throws IOException
    {   byte i[]=new byte[512];
        while(true)
        {
            System.in.read(i);
             buffer.put(i);
            System.out.println("Sender put:"+i);
        }
    }

改为:

public void run() {
        byte i[] = new byte[512];
        while (true) {

            try {
                System.in.read(i);
                buffer.put(i);
            } catch (IOException e) {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            }
            System.out.println("Sender put:" + i);
        }
    }



public void run() throws IOException  
不能这样写,异常IOException与Thread.run()中的 throws 子句不兼容

板凳

import java.io.*;
class BufferLock
{   
    private int j=0;
    private byte value;
    private boolean isEmpty=true;
    public synchronized void put(byte i[]) throws IOException
    {    
        
        while(!isEmpty)
        {
            try
            {
                this.wait();
            }
            catch(InterruptedException e){}
        }
        value=i[j];
        j++;
        isEmpty=false;
        notify();
    }
    public synchronized byte get()
    {
        while(isEmpty)
        {
            try
            {
                this.wait();
            }
            catch(InterruptedException e){}
        }
        isEmpty=true;
        notify();
        return value;
    }
}

class Sender extends Thread 
{
    private BufferLock buffer;
    public Sender(BufferLock buffer)
    {
        this.buffer=buffer;
    }
    public void run() //throws IOException
    {   byte []i=new byte[512];
        while(true)
        {
            try
            {
                System.in.read(i);
                 buffer.put(i);
                for(int j=0;j<i.length;j++)
                {
                    System.out.print("Sender put:"+new Byte(i[j]).intValue()+" ");
                }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        }
    }
}

class Receiver extends Thread 
{
    private BufferLock buffer;
    public Receiver(BufferLock buffer)
    {
        this.buffer=buffer;    
    }
    public void run()
    {
        for(;;)
            System.out.println("\t\t\t Receiver get:"+buffer.get());
    }

    public static void main(String args[]) throws IOException
    {
        BufferLock buffer=new BufferLock();
        (new Sender(buffer)).start();
        (new Receiver(buffer)).start();
    }
}

3 楼

谢谢以上2位帮忙.但是haoboy的好象输出结果不是交替输出,输出的是整型,不是字符型

4 楼


好像输入和输出不是同步.还有输出不是字符型.应该怎么改才可以把他一边输出和输入

我来回复

您尚未登录,请登录后再回复。点此登录或注册