-2

我有一个问题,我的应用程序冻结。当我使用new P2P("string");重量级 GUI 时。

我的困惑是在这个while循环中运行它的最佳方法是什么?这样它就不会冻结整个操作系统?

示例用例:

public void run() {
    while (true) {
      byte[] buf = new byte[5024];
      int bytes_read = 0;      
      bytes_read = sockInput.read(buf, 0, buf.length);
      String data = null;
      data = new String(buf, 0, bytes_read);
      System.out.println("[TCP]: incomeing data: " + bytes_read + " bytes, data=" + data);

      //
      // get some commands on TCP parse it and trigger this
      //
      new P2P(main.my_info_array);
      // After some time the whole OS freeze requires shutdown reboot physically
      // how to improve it

    }
  }
4

2 回答 2

2

在后台线程(即除事件调度线程之外的线程)中执行长时间运行的任务。这是必需的,因为 Swing 是单线程的。有关更多信息,请参阅Swing 中的并发

于 2012-09-14T21:00:02.887 回答
0

好的,请执行以下操作:

1) 告诉我们您的操作系统(例如 CentOS 5.5)、硬件(例如 4-CPU 2.4GHz Pentium、2GB RAM)和 JDK(例如 Sun Java,32 位 1.6.0_21)。

2) 如果可能,请指定指向您的 P2P 库的链接和版本号。

3) 修改您的代码,使其只读取套接字并调用 P2P一次(即请注释掉循环)。

4) 在单独的终端窗口中运行“top”。

5)运行你的程序。观察您的程序是否突然开始消耗大量内存和/或大量 CPU。“顶部”在冻结之前最后说的是什么?

6) 报告你的发现。

于 2012-09-14T23:47:16.710 回答