将控制权从应用程序转移到 java 框架

Bring control from application to java frame

我使用 java 程序在 arduino 板和临时文件之间进行通信。沟通进行得很好。我使用用户界面开始通信,其中我有名为

的按钮

connect close and minimize

当用户单击连接按钮时,代码将检查组合框中的值并相应地打开暂存文件。

单击连接按钮后,控件将移至临时应用程序。完成工作后,我尝试关闭划痕。我的 scratch 应用程序按预期关闭,但控件没有 return 到用户界面,因此我无法关闭应用程序,我在 net beans 中强制关闭它。在输出屏幕中,我没有看到构建成功,而是我停止了构建。那是我的过程完美运行,直到我给出连接但是一旦按下按钮它就会挂在某个地方。

我试着把它做成一个 jar 文件,然后 运行 它在另一台机器上,当时我在任务管理器中使用结束任务来关闭应用程序。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

if("Disconnect".equals(jButton1.getText()))
{
    System.exit(0);
}

if(jComboBox2.getSelectedItem()==null)
{
    System.out.println("Select one port");
}
else
{           
    Runtime r = Runtime.getRuntime();

    try {
        //this.hide();
        //p = r.exec("C:\Program Files\Scratch 2\Scratch 2.exe     C:\Users\Admin\Desktop\fwdbckpwm12.sb2");

        p = Runtime.getRuntime().exec("C:\Program Files\Scratch 2\Scratch   2.exe C:\Users\Admin\Desktop\scratch files new.sb2");

        //Runtime.getRuntime().exec("taskkill /F /IM <p>.exe");            
        //p.destroy();
        //r.exec("C:\Windows\notepad.exe C:\Windows\ss.txt");
        //this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        A4S a4sObj = new A4S(new String[] {jComboBox2.getSelectedItem().toString()});  //defaultline

        //A4S a4sObj = new A4S(new String[]{"COM16"});  //addedline
        //r.gc();
        //this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    } catch (IOException ex) {
        Logger.getLogger(serialportselection.class.getName()).log(Level.SEVERE, null, ex);
    } 
    finally{
        //p.destroy();
        //System.gc(); 
   // }

}            

这是我试过的代码。但是 none 似乎有效。

据我所知,您使用 SWING 创建了 UI。 您可以设置

 yourFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);

适合你的相框。这一定有帮助。

  1. 将所有与进程相关的工作移到单独的线程中。
  2. 使用waitFor方法识别流程结束 - 然后你就可以自由了 退出您的应用程序。