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啥的基本没啥了解,希望有人能够帮我解释一下 囧
但是你的socket应该是阻塞式的你看看是不是这个问题
①如果
new ChuLiQiJu( new ObjectInputStream(s.getInputStream()), res)).start();
以这种形式传入参数的话,基本上100%会卡住
②如果在Response类的构造方法里面和BufferedOutputStream等一起new出来,等下再传进去的话,有可能成功,不过也会直接连Response都启动不了……
③如果把ChuLiQiJu的形参改为(Socket s, BufferedOutputStream res),在其构造方法里面新建ObjectInputStream的话,也是在构造方法这里卡住了……应该说就是ObjectInputStream的构建的问题,不过到底为啥……Buffer不是一点事都没有么 orz
那多线程怎么来??? join方法干什么用的?
再说的简单一点,你的main()方法不是一个线程?你在main方法里调用另一个线程不行??