运行环境是linux需要在终端运行的console程序下添加对应于方向键的光标左移/右移功能,以便对已经输入的命令进行插入或修改我写的方法是用read()读取每个键盘输入的字符,然后将字符存入一个StringBuffer中,在左移的方法中,定义一个位置变量pre_position,
在按下左方向键后,将StringBuffer进行toString后拆分赋给str1和str2, str1为位置变量前的部分,str2为位置变量后的部分,然后将StringBuffer清零,
将str1重新赋给StringBuffer, 因为本行命令已经打印出来,所以我本来打算是从当前行的最开头重新打印StringBuffer,这样光标位置就左移了一位,并且最右边的一个先前已经打印出来的字符就被保留了下来。可实际操作中发现重新打印的时候是以最右边的字符为基准打印的,这样被保留下来的反而是最左边的字符各位大大有没有人知道该如何做啊?
或者有控制光标左移/右移的方法,或者能够明确让命令行重新打印的时候能够确定的从一行的最左边开始打印

解决方案 »

  1.   

    这个很简单啊,就是这样……,再……,然后……,不就行了么,呵呵
    Sorry,能力有限,顶一下!
      

  2.   

    能不能输出几个ascii 08,把以前的东西都删掉?
    不知道。
    友情UP
      

  3.   

    似乎有人说什么java没有命令行下的图形字符库,不知道这个说法对不对
    不过要是知道增样控制字符闪烁也可以解决这个问题
    后台的逻辑已经没有问题了,就是在终端显示上无法得到所需的结果
      

  4.   

    据我所知单纯的Java不可能控制操作系统的控制台。有个charva项目,可以把AWT/Swing做好的东西,把包名换一下就变成字符终端界面了,
    它调用了一些DLL,不过具体的没有用过。
      

  5.   

    主要是现在这里是在别人程序的基础上添加功能,所以不能使用AWT/Swing的东西
      

  6.   

    要用一些C的函数才可以,比如Win32的Console API族。
      

  7.   

    没看明白你的意思你还是要客户端去控制服务器consol的光标位置?
      

  8.   

    问题解决了,但仍然有疑问,谁要是能告诉我下直接给分结帖了过程:
    最初的时候,我们读取命令的时候没有使用read(),而是使用readLine(),对于键盘输入并没有进行捕获,以UP方向键为例,
    当按下up键时,屏幕上会打印出^[A的字符,而up键的keycode是由这三个字符组成的,分别是27,91,65
    当我们进行捕获之后,由于之前并没有对字符进行打印操作,所以没有得到预期结果
    后来在偶然的情况下发现了使用
    System.out.print((char)27);
    System.out.print((char)91);
    System.out.print((char)65);
    的代码反而实现了光标左移总结:在未捕获键盘keycode时按下方向键系统会将方向键的三个键值分别以字符形式打印出来
                而当我们捕获了键盘keycode后,再使用system.out.print();将三个键值连续打印出来后反而实现了光标左移问题:希望哪位大侠知道的给指点一下,谢谢了
      

  9.   

    我觉得(char)8就可以左移,但不删除字符,直接输出就可覆盖原有的
    27是esc,应该是不可视的,看不到效果,可能会“滴”的一声响。
    91是“[”,65是“A”不应该是左移啊。
      

  10.   

    我是在linux系统下的,实际得到的keycode左方向键就是由27,91,65三个键值共同组成的。
    可能在window下会不一样。
    比较疑惑的是在没捕捉键值的情况下终端会打出这三个值单独所代表的字符,捕捉了然后sys.out反而实现了