连接到服务器后,我在服务器上运行一些命令,然后尝试将服务器知识带到控制台;
while(i!=-1){
String c="";
String line = "";
try {
while ((i = input.read()) != 10 && i!=-1) {
bx[0] = (byte) i;
c = new String(bx);
line = line + c ;
System.out.print(c);
}
} catch (IOException e2) {
e2.printStackTrace();
}
File outfile = new File("calltrak.txt");
boolean append = true;
try
{
if (!outfile.exists())
{
append = false;
}
FileWriter fout1 = new FileWriter("calltrak.txt",append);
PrintWriter fileout = new PrintWriter(fout1,true);
fileout.println(line);
fileout.flush();
fileout.close();
} catch (IOException e1) {
e1.printStackTrace();
}
disp.append(line);
}
但问题是当程序从服务器窗口读取所有行时,在服务器中它等待新输入并且我的程序仍然要读取行并因此锁定...我怎样才能解决这个问题......(注意:使用定时器不是一种解决方法,因为程序读取的行可以是100行或100000,有时服务器可以工作缓慢)(在代码“disp”中是Jpanel名称)
答案 0 :(得分:1)
我使用并行线程解决了这个问题。通过启动Inputstream读取方法,我也启动了另一个线程,并在其中放入一个timer.If read方法等待超过5秒,其他线程传递-1到第一个循环,所以循环终止。
答案 1 :(得分:0)
您的代码在性能方面有几个问题,但要回答您的问题,您应该让服务器在末尾发送EndOfText 0x3或EndOfTransmission 0x4,然后以这种方式终止AsciiTable。