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

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 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?