我在JavaFX SceneBuilder中的一个文本字段上设置了这个OnClick方法,如果用户选择该文本字段,该文本字段将弹出Windows 8触摸键盘。然而,当我点击文本字段时,似乎什么都没有发生,但当我尝试在任务管理器中检查Tabtip.exe时,它确实显示在那里。代码为:
try
{
Runtime rt = Runtime.getRtuntime();
rt.exec( "cmd /c C:\Programs Files\Common Files\Microsoft Shared\ink\TabTip.exe");
}
catch
{
ex.printStackTrace();
}
没有触发任何错误,TabTip.exe正在任务管理器中运行,但弹出键盘没有显示,有人能解决这个问题吗?谢谢
当您想要执行一个在命令提示符中包含空格的命令时,必须用双引号将其括起来。
像这样:
String commandStr = "cmd /c "C:\Program Files\Common Files\Microsoft Shared\ink\mip.exe"";
rt.exec( commandStr );
除此之外,如果您想知道您的错误,您可以从类Process的对象中获取错误流,该对象由runtimeObject.exec().返回
String commandStr = "cmd /c C:\Programs Files\Common Files\Microsoft Shared\ink\TabTip.exe"; // Like you did
InputStream is = rt.exec( commandStr ).getErrorStream();
int b;
while((b=(is.read()))!=-1)
System.out.print((char)b);
}
请这样做。对我来说,在window10中使用javaFx应用程序是可以的。
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", ""C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe");
builder.redirectErrorStream(true);
Process p;
try
{
p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true)
{
line = r.readLine();
if (line == null)
{
break;
}
System.out.println(line);
}
}
catch (IOException e)`enter code here`
{
// TODO Auto-generated catch block
e.printStackTrace();
}`enter code here`
运行TabTip.exe的唯一方法是在管理模式下运行软件。
我在网上找到了以下批次代码。
如何使用屏幕和触摸键盘代替螺旋键盘
tasklist | find /I "TabTip.exe" >NUL && (taskkill /IM "TabTip.exe" /T)
start "" "TabTip.exe"
该代码终止了TabTip进程并执行了一个新的TabTip。
在我的例子中,我创建了一个名为keyboard.bat的文件,并添加了前面的示例。
在java中,我创建了一个方法来读取同一文件夹中的这个文件。
这是我的代码
try{
File file = new File("keyboard.bat");
Runtime.getRuntime().exec(file.getAbsolutePath());
}catch(IOException ex){
Logger.getLogger(RunGazePoint.class.getName()).log(Level.SEVERE, null, ex);
}
之后,我编译了我的应用程序,并用launch4j软件以可执行模式封装它。
另一种方式是通过命令执行,如果使用多线程,系统可以避免文件的说教而不执行软件。
创建两个方法来杀死和调用键盘。
//hide the Keyboard
String[] array = new String[]{"cmd.exe","/c","taskkill /IM "TabTip.exe" /Fn" +
""};
Runtime.getRuntime().exec(array);
//Show the keyboard
String[] array = new String[]{"cmd.exe","/c","start "" "TabTip.exe""};
Runtime.getRuntime().exec(array);