ya-b 2015-07-08 15:46 采纳率: 100%
浏览 2014
已采纳

Runtime.getRuntime().exec(is.readLine());遇到问题

程序没报错,执行到Runtime.getRuntime().exec(is.readLine());时没看到任何效果,也不继续执行接下来的代码。is.readLine() 是"cmd /k start E://test.txt"。

public class Server {
public static void main(String [] args) {
try {
ServerSocket sersoc = null;
try {
sersoc = new ServerSocket(8399);
} catch (Exception e) {
// TODO: handle exception
}
Socket socket = null;
try {
socket = sersoc.accept();
} catch (Exception e) {
System.out.println("Error."+e);
}
String line = null;
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));

        System.out.println(is.readLine());
        Runtime.getRuntime().exec(is.readLine());

        while(!line.equals("bye")){
            os.println(line);
            System.out.println("Server:" + line);
            System.out.println("Client:" + is.readLine());
            line = sin.readLine();
        }
        os.close();
        is.close();
        sersoc.close();
        socket.close();
    }catch (Exception e) {
        // TODO: handle exception
        System.out.println(e);
    }
}

}

  • 写回答

6条回答

  • JonsonJiao 2015-07-09 02:15
    关注

    不能使用两次readLine方法,因为第一次已经读取了内容,下次exec的时候是处于等待输入的状态,他读取不出来了,所以没有执行,会一直等待输入。解决办法就是第一次读取的时候将其转换为变量,修改如下:

    String command = is.readLine();
    System.out.println(command);
    Runtime.getRuntime().exec(command);
    
    

    修改为上面的即可执行操作了,前提是你的command已经传过来了啊。

    你这个代码只是server端的,看不到你的client端是怎么写的,因此需要你确保能够读取到你client端输入的命令。

    另外你的代码中,line直接赋值了null,是不对的,即使你执行了命令,在下面的while判断中也会报空指针的,这一行代码:

    while(!line.equals("bye")) 
    

    将line初始化修改一下。

    此外,不建议使用BufferedReader方法来读取client端传送的内容,因为你要在client中输入命令的话,必须手动加上

    \r\n 
    

    否则server端读取不到你输入的命令,readLine是以换行符为读取结束的。你可以参考下这个里面介绍的读写方法。http://www.cnblogs.com/xignzou/p/3202346.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。