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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张超 中级黑马   /  2012-10-22 13:52  /  1099 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
public class PipedStream
{
        public static void main(String args[])
        {
                try
                {
                        //Thread t1=new Sender();
                        Thread t2=new Receiver();
                       
                        //PipedOutputStream out=t1.getOutputStream();
                        PipedInputStream in=t2.getInputStream();//这个地方报的错,报错为无法找到getInputStream().此处为了方便我把线程t1关闭了,并且在打开t1比调用它的情

况下报的错与t2的一样。
                       
                        //out.connect(in);
                //t1.start();
                t2.start();//注:当我把不开启t2线程时,报的错也是一样的,也就是在单线程的情况下也不能够用in去调用getInputStream()方法,什么原因呀。谢谢.
               
                }
                catch(IOException ee)
                {
                        System.out.println(ee.getMessage());
                }
        }
       
}
class Sender extends Thread
{
        private PipedOutputStream out=new PipedOutputStream();
        public PipedOutputStream getOutputStream()
        {
                return out;
        }
        public void run()
        {
                String s=new String("hell heima");
                try
                {
                        out.write(s.getBytes());
                        out.close();
                }
                catch(IOException ee)
                {
                        System.out.println(ee.getMessage());
                }
        }
}
class Receiver extends Thread
{
        private PipedInputStream in=new PipedInputStream();
        public PipedInputStream getInputStream()
        {
                return in;
                System.out.println("haha");
        }
        public void run()
        {
                String s1=null;
                byte[] buf=new byte[1024];
                try
                {
                       
                        int len=in.read(buf);
                        s1=new String(buf,0,len);
                        System.out.println("the following message comes from sender:\n+s");
                        in.close();
                }
                catch(IOException e)
                {
                        System.out.println(e.getMessage()+"aa");
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
因为你的父类中没有这个方法,所以编译器会报错,只需要告诉编译器指向的对象是子类就行了。
class PipedStream
{
        public static void main(String args[])
        {
            try
            {
              Thread t1=new Sender();
                Thread t2=new Receiver();
                PipedOutputStream out=((Sender) t1).getOutputStream();
                /*这个地方报的错,是因为t1是父类Thread的引用,这个类中没
                 *有 getOutputStream()方法
                 * */
                PipedInputStream in=((Receiver) t2).getInputStream();
                out.connect(in);
                t1.start();
                t2.start();
            }
            catch(IOException ee)
            {
                    System.out.println(ee.getMessage());
            }
        }
        
}
class Sender extends Thread
{
        private PipedOutputStream out=new PipedOutputStream();
        public PipedOutputStream getOutputStream()
        {
                return out;
        }
        public void run()
        {
                String s=new String("hell heima");
                try
                {
                        out.write(s.getBytes());
                        out.close();
                }
                catch(IOException ee)
                {
                        System.out.println(ee.getMessage());
                }
        }
}
class Receiver extends Thread
{
        private PipedInputStream in=new PipedInputStream();
        public PipedInputStream getInputStream()
        {
                return in;
               // System.out.println("haha");
        }
        public void run()
        {
                String s1=null;
                byte[] buf=new byte[1024];
                try
                {
                        
                    int len=in.read(buf);
                    s1=new String(buf,0,len);
                    //System.out.println("the following message comes from sender:\n+s");
                    System.out.println("the following message comes from sender:\n"+s1);
                    in.close();
                }
                catch(IOException e)
                {
                        System.out.println(e.getMessage()+"aa");
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马