netbeans 运行时.getRuntime().exec无法执行/显示Tabtip.exe

hxzsmxv2  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(203)

我在JavaFX SceneBuilder中对一个文本字段设置了OnClick方法,如果用户选择该文本字段,Windows 8触摸键盘将弹出该方法。但是,当我单击该文本字段时,似乎没有任何React,但当我尝试在任务管理器中检查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是运行在任务管理器,但弹出键盘没有显示,任何人有任何解决办法?谢谢!

8wigbo56

8wigbo561#

每当你想执行一个命令提示符中包含空格的命令时,你必须用双引号把它括起来。
就像这样:

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);
}
csga3l58

csga3l582#

请这样做。对我来说,在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`
2sbarzqh

2sbarzqh3#

运行TabTip.exe的唯一方法是在管理模式下运行该软件。
我在互联网上找到了以下批次代码。
How to Use On-Screen and Touch Keyboard Instead of Spiral Keyboard

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软件将其 Package 为可执行模式。
另一种方法是通过命令执行,如果你使用的是多线程系统可以避免讲座的文件和不执行软件。
创建两个方法来终止和调用键盘。

//hide the Keyboard
            String[] array = new String[]{"cmd.exe","/c","taskkill /IM \"TabTip.exe\" /F\n" +
""};
            Runtime.getRuntime().exec(array);

//Show the keyboard
            String[] array = new String[]{"cmd.exe","/c","start \"\" \"TabTip.exe\""};
            Runtime.getRuntime().exec(array);

相关问题