class ChuLiQiJu implements Runnable  //在下面要被建立的线程
{
boolean flag = true;
ObjectInputStream Ois;
BufferedOutputStream res;
Socket s;
int friend, x, y;
public ChuLiQiJu(ObjectInputStream Ois, BufferedOutputStream res) 
{
JTA.append("初始化" );
this.Ois = Ois;
this.res = res;
}
public void run()
{
                    //......
                   }
          }         class Response implements Runnable  //这是启动了的一个线程
{
BufferedOutputStream res;
BufferedInputStream acc;
Socket s;
boolean flag = true;
int order;
public Response(Socket s)
{
this.s = s;
try
{
acc = new BufferedInputStream(s.getInputStream());
res = new BufferedOutputStream(s.getOutputStream());
}
catch(IOException e) 
{
JTA.append(s.getInetAddress().getHostName() + " IO流出现异常\n");
}
}
public void run()
{

while(flag)
{
try
{
order = acc.read();
int n = new Request(order).response();
res.write(n);
res.flush();
if(n == 1)                                       
{
new Thread(
    new ChuLiQiJu( new ObjectInputStream(s.getInputStream()), res)).start();     //在这里卡住了
                                              }
                                     catch(Exception e)
                                     {
                                     }
                             }
                    }
           }在Eclipse的调试里,建立新的线程的时候那个下一步的按钮就暗掉,进行不下去了……也就是说,这个线程即没有被结束,新的线程也没有被建立起来,当然也没有错误抛出……
于是我就觉得自己是不是犯了啥非常常识性的错误……比如不能在一个线程里启动另一个线程啥的……(汗
总之这个问题让我很疑惑,也不知道是咋回事希望各位能够指导一番
(嗯?莫非是客户端的问题?……)还有一个问题就是,为啥我在用BufferedOutputStream传输数字的时候要传两次对方才有反应?
有时候也会突然暴走传起一些莫名其妙的东西。。= =
本人对IO啥的基本没啥了解,希望有人能够帮我解释一下  囧

解决方案 »

  1.   

    一个线程里面启动一个线程我没试过,但是应该没问题
        但是你的socket应该是阻塞式的你看看是不是这个问题
      

  2.   

    可以在一个线程中启动另一个线程你的新线程是不是没有调用sleep(long)以释放资源??
      

  3.   

    有点小奇怪……
    ①如果
    new ChuLiQiJu( new ObjectInputStream(s.getInputStream()), res)).start(); 
    以这种形式传入参数的话,基本上100%会卡住
    ②如果在Response类的构造方法里面和BufferedOutputStream等一起new出来,等下再传进去的话,有可能成功,不过也会直接连Response都启动不了……
    ③如果把ChuLiQiJu的形参改为(Socket s, BufferedOutputStream res),在其构造方法里面新建ObjectInputStream的话,也是在构造方法这里卡住了……应该说就是ObjectInputStream的构建的问题,不过到底为啥……Buffer不是一点事都没有么 orz
      

  4.   

    谁说在一个线程里启动另外一个线程不行??
     那多线程怎么来???  join方法干什么用的?
     再说的简单一点,你的main()方法不是一个线程?你在main方法里调用另一个线程不行??