选择第二个文本字段后,Runtime.getRuntime()。exec无法正常工作

时间:2014-04-02 03:35:03

标签: java javafx fxml

我正在使用这个包含2个文本字段和一个按钮的登录页面。每当我点击第一个文本字段时,都会弹出屏幕键盘(osk.exe),但是当我点击第二个文本字段时,屏幕键盘似乎没有关注第二个文本字段,这意味着我不能在第二个文本字段中键入任何内容,所以我尝试做的是停止osk.exe进程并在我选择第二个文本字段时再次启动它,但是第一次单击时osk似乎没有弹出,我必须单击第二次弹出它,所以这意味着每次我点击文本字段时,它会弹出并逐个关闭OSK,任何人都可以帮我吗?我的两个textfield在JavaFx Scene Builder中有以下onClick方法:

public void osk (){

    try
    {
        killProcess();
        Runtime.getRuntime().exec("c:\\Temp\\osk.exe");

    }
    catch ( Exception ex )
    {
        ex.printStackTrace();
    }

                    }



 public static void killProcess() throws Exception {

    Runtime rt = Runtime.getRuntime();
    rt.exec("taskkill " + "osk.exe");

    Runtime.getRuntime().exec( "taskkill /IM " + "osk.exe" );

 }

编辑:我添加了更多说明,抱歉不提前包含它。

2 个答案:

答案 0 :(得分:1)

taskkill是一个Windows cmd命令。我想您可以尝试按rt.exec("taskkill " + "osk.exe");

替换rt.exec("cmd.exe /c taskkill " + "osk.exe");

答案 1 :(得分:0)

我自己设法解决了这个问题,事实证明我必须延迟线程一秒钟,否则OSK将没有机会弹出,从而被杀死。如果我错了,请纠正我

 try
    {

     killProcess();


     try {
              Thread.sleep(1000);
         }    catch(InterruptedException ex) 

         {
              Thread.currentThread().interrupt();
         }



     Runtime.getRuntime().exec("c:\\Temp\\osk.exe");

    }
    catch ( Exception ex )
    {
        ex.printStackTrace();
    }

                    }