将控制权从应用程序转移到 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);
适合你的相框。这一定有帮助。
- 将所有与进程相关的工作移到单独的线程中。
- 使用waitFor方法识别流程结束 - 然后你就可以自由了
退出您的应用程序。
我使用 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);
适合你的相框。这一定有帮助。
- 将所有与进程相关的工作移到单独的线程中。
- 使用waitFor方法识别流程结束 - 然后你就可以自由了 退出您的应用程序。