在java控制台程序中,怎么读入组合键ctrl+z?
我在java控制台程序中,让屏幕一直在翻滚显示我获取的数据信息(很多,n行)。但现在我想要在显示过程中,按ctrl+z能够停止显示,应该怎么写代码呢?
我觉得问题难点在于:
1,ctrl、alt、shift在控制台程序中如何读取?
2,如何不敲回车就把输入的字符提交给程序?
3,如何控制屏幕回显?
查了n多资料没有解决问题,跪求各位高手不要在潜水观望请挺身而出帮我这一回吧!
问题点数:0、回复次数:29Top
1 楼youyue(由月)回复于 2005-03-04 11:53:14 得分 0
就算不会解答,也请过路的好心人帮我顶一下吧Top
2 楼Z_Beginner(探索中)回复于 2005-03-04 12:42:52 得分 0
我觉得第二个问题只要加个判断输入框是否与上次相同,如果不同就提交给程序,相同不提交。Top
3 楼kekelehuo(可可乐)回复于 2005-03-04 12:53:53 得分 0
我也是刚开始自学这个问题我查过。
通过InputEvent类可以接收输入的按键,在InputEvent类里定义了一些掩码。他们是int型的整数。例如:鼠标左健是BUTTON1_MASK,鼠标右键是BUTTON2_MASK,还有CTRL_MASK,ALT_MASK,SHIFT_MASK.
比如判断按下CTRL+鼠标左键: InputEvent.CTRL_MASK+InputEvent.BUTTON1_MASK;Top
4 楼yunjava(呵呼)回复于 2005-03-04 13:21:55 得分 0
upTop
5 楼youyue(由月)回复于 2005-03-04 14:06:23 得分 0
awt里的event,能在java命令行程序中使用吗?Top
6 楼liuchunjp()回复于 2005-03-04 14:08:31 得分 0
InputEvent不成Top
7 楼BasaraTracy(不屈斗志)回复于 2005-03-04 15:05:40 得分 0
期待中...Top
8 楼youyue(由月)回复于 2005-03-04 15:16:12 得分 0
可能是我表述错误,不该说控制台程序,应该说命令行程序。
窗口程序中我会读取组合键,但命令行程序中有办法实现吗?Top
9 楼chinajava(chinajava)回复于 2005-03-04 15:51:48 得分 0
2,如何不敲回车就把输入的字符提交给程序?
这个不能实现!
Top
10 楼fightboy(眼泪哗哗的)回复于 2005-03-04 16:21:24 得分 0
同意 chinajava(chinajava) 的观点。
磨办法啊。
绕路走吧。曲线救JavaTop
11 楼liuchunjp()回复于 2005-03-04 16:38:51 得分 0
不可能实现Top
12 楼Z_Beginner(探索中)回复于 2005-03-04 17:56:39 得分 0
我觉得可以实现,只要用线程间隔一定时间读取输入的内容,在判断是否提交给程序。Top
13 楼knight_yl(knight_yl)回复于 2005-03-04 18:05:30 得分 0
可以用java 的swing来模拟实现控制台。
保证效果一样,
^_^.
Top
14 楼knight_yl(knight_yl)回复于 2005-03-04 18:07:08 得分 0
这儿可能是控制台里面inputstream的限制,如果突破这个限制就可以了。
具体问题具体分析哦,Top
15 楼enrico(小甭)回复于 2005-03-04 19:03:32 得分 0
路过,帮你顶Top
16 楼bigc2000(公元2005年4月9日)回复于 2005-03-04 19:48:48 得分 0
不会,还是用vc吧Top
17 楼kaymo( 。。。 )回复于 2005-03-04 22:41:23 得分 0
不错Top
18 楼wialways(唯一)回复于 2005-03-05 12:48:07 得分 0
upTop
19 楼eureka0891(迷茫中...)回复于 2005-03-05 13:37:28 得分 0
用swing还行吧,
用console?
不可能吧, cttl + z是返回啊,
程序不可能运行了Top
20 楼Idora(我不当老大已经很多年,恩)回复于 2005-03-05 17:02:31 得分 0
楼主可以考虑将结果输出到文件,这样看结果Top
21 楼yxhzj(余华[学习J2EE中])回复于 2005-03-05 17:21:03 得分 0
upTop
22 楼youyue(由月)回复于 2005-03-05 22:48:23 得分 0
那很多unix下用java做的命令行程序,都没有实现这些功能吗?Top
23 楼bky2003(beyond)回复于 2005-03-05 23:24:43 得分 0
关注Top
24 楼GFNotFoundException(喜欢下雨天)回复于 2005-03-05 23:51:29 得分 0
学习ing~问题确实是令人烦恼,不过问题也促使着一个人在进步!Top
25 楼fightboy(眼泪哗哗的)回复于 2005-03-07 10:11:57 得分 0
各位,下边是我失败的代码,我觉得是没有办法了。
回车提交和回显好像系统提供的东西。
磨办法啊。
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.util.Timer;
import java.util.TimerTask;
/**
* This class is TODO class.
* @author wenzhou
* @version $Id$
*/
public class TestInput
{
public StringBuffer cacheString = new StringBuffer();
public boolean blockOutput = false;
public TestInput() throws Exception
{
PrintStream orgOut = System.out;
//下边一段模拟输出
final Timer timer = new Timer();
TimerTask task = new TimerTask() {
int i = 1;
public void run()
{
println("Test output; " + (i++));
if(i > 1000)
{
timer.cancel();
}
}
};
timer.schedule(task ,1000L,1000L);
//下边一段想办法修改输入,未果
//下边这两句是打算把系统的BufferedInputStream去掉。以为就不缓冲了。结果
//还是不行。
//FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
//System.setIn(fdIn);
while(true)
{
FileDescriptor.in.sync();
if(System.in.available() != 0)
{
char c = (char) System.in.read();
//按S键暂停打印
if(c == 's')
{
setBlock(true);
}
//按Q键恢复打印
else if(c == 'q')
{
setBlock(false);
}
}
}
}
//搞个缓冲把输出存起来
public void setBlock(boolean block)
{
blockOutput = block;
if(!blockOutput)
{
System.out.println(cacheString);
cacheString = new StringBuffer();
}
}
public void println(String s)
{
if(blockOutput)
{
cacheString.append(s);
cacheString.append("\n");
}
else
{
System.out.println(s);
}
}
public static void main(String[] args) throws Exception
{
new TestInput();
}
}
Top
26 楼d23372()回复于 2005-03-07 10:21:30 得分 0
不会,关注,顶!!!Top
27 楼edsonwen()回复于 2005-03-07 10:31:27 得分 0
只能帮顶!Top
28 楼youyue(由月)回复于 2005-03-08 10:02:45 得分 0
再顶Top
29 楼fightboy(眼泪哗哗的)回复于 2005-03-08 11:19:47 得分 0
去掉回显可以像这个样子:
System.out.print("Test abcde");
String erase = "\b \b";
System.out.print(erase);
System.out.print(erase);
Top




