在一个JButton的响应函数中有如下代码:eyesTester.start();
this.setState(JFrame.ICONIFIED);启动一个新的进程,然后窗口自己最小化。eyesTester的run里是循环执行一组操作的,在不用图形界面的情况下,循环一次的时间大概500ms,
但是在使用上面这段代码执行后,循环一次的时间变得超长有8-10秒的时间。后来测试发现当JFrame窗口在最上的时候循环执行速度是正常的,每周期500ms左右,但是一旦窗口不在最上了,则执行速度变慢。所以我猜想是不是JFrame不在最前显示的时候(包括最小化或被其他程序掩盖)他的进程优先级变低,导致执行速度变慢(此窗口运行时还有一个需要很多资源的程序在同时运行)。求高手指点:
如果我猜想是错的,这种情况是怎么回事,要怎么解决。
如果我的猜想是正确的,有没有什么方法能够让Swing不在最前显示的时候进程优先级依然保持最高。java的或针对windows的方法都行。万分感谢!:)

解决方案 »

  1.   

    我认为应该是这样!你运行其他程序,系统会把更多的cpu分给当前的这个程序!至于优先,不至于吧!这个进程运行后,应该就定义了优先等级!不会改变!!个人看法!等待高手。
      

  2.   

    把jframe visible == false
    这样试试看
      

  3.   

    解决了:)。猜想应该是在事件派发线程中创建的线程属于事件派发线程的子进程。当GUI被隐藏时,事件派发线程对资源占用的优先级被降低了,所以他的子进程访问CPU,I/O等资源的优先级也就低了。因此用setDeamon把事件派发线程创建的子进程变成JVM的deamon进程,该进程就不会跟着事件派发线程降级了。后来还发现一个问题,作为deamon线程时一周期用时300-500ms,作为事件派发线程子线程时,窗口在最前100+ms,不在最上就10秒了- -。貌似作为deamon线程时对资源的占用还是比事件派发线程在窗口在最前运行时的占用率低。问题我凑活着解决了,但原理方面都是我猜的囧,哪位可以提供官方点的文档链接,或作更专业点的解释就结贴送分了,呵呵。