我刚开始用的是eclipse 3.1,写一程序运行很流畅;后来我又在机器上装了个eclipse 3.3。这时我在3.1上运行源程序时,发现它会卡在一句代码处-----moudleID = usrid.readLine();便不再往下走了
代码如下:
public static void main(String[] args) {
String hostname="127.0.0.1";

String moudleID="";
//int port=DEFAULT_PORT;
try {
System.out.println("请输入中间件服务器地址:");
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
hostname = br.readLine();

System.out.println("请输入模块名:");
BufferedReader usrid = new BufferedReader(
new InputStreamReader(System.in));
moudleID = usrid.readLine();

} catch (IOException e) {
e.printStackTrace();
}

try {
InetAddress ia = InetAddress.getByName(hostname); SenderThread sender = new SenderThread(ia, DEFAULT_PORT,moudleID); sender.start(); ReceiverThread receiver = new ReceiverThread(sender.getSocket()); receiver.start(); } catch (UnknownHostException e) {
System.err.println(e);
} catch (SocketException e) {
e.printStackTrace();
} }
把3.3删了后还是如此,这是为什么?如何解决?

解决方案 »

  1.   

    终于从你的文字里看到这段代码了。
    moudleID = usrid.readLine();便不再往下走了
    这个代码当然不能往下走了啊。这个要你输入"值"按回车,然后才能执行下文啊。
      

  2.   


    koko你说的什么呢,看不懂呀..楼主,直接用br 读取试试
    System.out.println("请输入中间件服务器地址:"); 
    BufferedReader br = new BufferedReader(new InputStreamReader( 
    System.in)); 
    hostname = br.readLine(); System.out.println("请输入模块名:");  
    moudleID = br.readLine(); 
      

  3.   

      public static void main(String[] args) {
        String hostname = "127.0.0.1";
        String moudleID = "";
        // int port=DEFAULT_PORT;
        try {
          System.out.println("请输入中间件服务器地址:");
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          hostname = br.readLine();
          System.out.println("请输入模块名:");
          BufferedReader usrid = new BufferedReader(new InputStreamReader(System.in));
          moudleID = usrid.readLine();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }这段代码在我的3.3上没有任何问题,楼主不行就到 cmd 里面运行你的程序看看吧!
      

  4.   

    我也感觉没有问题啊。难道是你的eclipse 3.3的问题么?
      

  5.   

    我觉得这个明显应该是程序问题,System.in作为一个由系统维护的全局输入流,其使用应该是有锁机制的,之所以会卡在第二个ReadLine()处是因为new第一个BufferedReader时使用了System.in,但使用完之后却没有释放资源(System.in),因此当在第二个BufferedReader中使用到System.in时,程序会阻塞所以走不了。我觉得如果改成下面的应该就没问题了://在同一个实例中先后使用资源
    BufferedReader reader=new BufferedReader(new StreamReader(System.in));
    try { 
    System.out.println("请输入中间件服务器地址:"); 
    hostname = reader.readLine(); System.out.println("请输入模块名:");  
    moudleID = reader.readLine(); } catch (IOException e) { 
    e.printStackTrace(); 
    }或是下面这样应该也可以://释放资源后在new第二个实例,但这的确有点浪费
    try { 
    System.out.println("请输入中间件服务器地址:"); 
    BufferedReader br = new BufferedReader(new InputStreamReader( 
    System.in)); 
    hostname = br.readLine();
    br.close(); System.out.println("请输入模块名:"); 
    BufferedReader usrid = new BufferedReader( 
    new InputStreamReader(System.in)); 
    moudleID = usrid.readLine(); //或者把br.close()放到这句之前应该也可以
    usrid.close(); } catch (IOException e) { 
    e.printStackTrace(); 
    }