日期:2014-05-20  浏览次数:20726 次

一个“提前运行”奇怪现象
String filename = "phonebook.dat";
String string;
int count = 1;
BufferedReader fileout = new BufferedReader(new FileReader(filename));
while((string = fileout.readLine() ) != null)
{
StringTokenizer tokenzier = new StringTokenizer(string,"\t");
while(tokenzier.hasMoreTokens())
{
stdOut.println("\n********" + count + "********\n");
stdOut.println("Name : " + tokenzier.nextToken());
stdOut.println("Phonenumber : " + tokenzier.nextToken());
stdOut.println("QQ : " + tokenzier.nextToken());
stdOut.println("E-mail : " + tokenzier.nextToken());
stdOut.println("Group : " + tokenzier.nextToken());
count ++;
}
}
String select;
int selection;
BufferedReader br = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
String s;
while((s = br.readLine()) != null)
sb.append(s + " ");
StringTokenizer tokenizer = new StringTokenizer(sb.toString(),"\t");
ArrayList<String> array = new ArrayList<String>();
while(tokenizer.hasMoreTokens())
array.add(tokenizer.nextToken() + "\t");
stdErr.println("Please input the number of the person who you want to delete : ");    //*********************
select = stdIn.readLine();
selection = Integer.parseInt(select);

我的程序时打开一个联系人信息存储的文件,例如:
Uknown   12345678910   123456789   123456789@qq.com   friend  Li Ming  123456  123456  123456@163.com  friend ommited………………
每个信息隔一个换行符
然后我按照顺序读取,请注意,问题来了,我竟然奇迹的发现代码中注释为***************的地方竟然提前运行至上面的循环中间了,如:
//Output
********1********

Name :   Uknown
Phonenumber :   12345678910
QQ :   123456789
E-mail :   123456789@qq.com
Group :   friend

Please input the number of the person who you want to delete :      //就是这里。本来应该出现在所有信息的后面。结果。。。。

********3********

Name :  Li Ming
Phonenumber :  123456
QQ :  123456
E-mail :  123456@163.com
Group :  friend
我以为是编译器抽风了,就重启了一下,第一次运行时正常者呢。结果第二次又成这样子了。。以前也有遇到过这种提前运行的情况,但是没有太在意 ,请问这到底是怎么一回事啊?怎么解决啊?好纠结。

------解决方案--------------------
在控制台下运行不会出现此问题。
我猜测是在eclipse下。
eclipse跟运行的java程序是两个进程,
涉及进程间通信的问题,
不知道eclipse是如何实现的。