【问题标题】:Process freeze( or crash) because of JFrame由于 JFrame 导致进程冻结(或崩溃)
【发布时间】:2015-03-28 10:54:08
【问题描述】:

这是我的代码。

    ProcessBuilder process = new         
    ProcessBuilder(MyPath);
    Process prp1 = process.start();

    final JFrame frmScanner;
    frmScanner = new JFrame();
    frmScanner.setTitle("Updater");
    frmScanner.setResizable(false);
    frmScanner.setBounds(100, 100, 370, 300);
    frmScanner.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    label1.setBounds(100,50,200,50);
    final JButton startButton = new JButton("Start!!!");
    startButton.setBounds(50, 140, 100, 50);


    JPanel p1 = new JPanel(null);
    p1.setBackground(new Color(255,255,255));

    p1.add(startButton);
    p1.add(stopButton);
    frmScanner.add(p1);
    frmScanner.setVisible(true);

我的流程任务是从项目的硬件中收集数据到文本文件。

我测试过,发现文本文件只能收集1KB的数据,然后进程挂起,因为frmScanner.setVisible(true); .

如果我手动运行该进程,该进程可以收集超过 1KB 的数据。 我该如何解决这个问题?

【问题讨论】:

  • 没有什么我可以评论的。你说这个过程将数据收集到一个文件中,也许是通过重定向?您的代码片段显然不会干扰启动的过程。我会以流程构建器调用您的子流程的方式进行搜索以查找问题。
  • 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用exec 并(继续)使用ProcessBuilder 来创建进程。

标签: java swing processbuilder


【解决方案1】:

您需要在称为 EDT 的特殊单独线程上完成所有与 UI 相关的工作(创建 JFrame 等)。查看文档:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

【讨论】:

  • UI 线程不应被操作系统中启动的进程所阻碍。
  • @thst 可能是在另一个线程上做 UI 的东西,那么 EDT 必然会导致问题。在解决其他问题之前,我会先修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2012-02-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多