1

私はJavaアプリケーションを開発しています

しかし、私のアプリケーションは、アプリケーションのプロセスを開始するとフリーズします

したがって、プロセス中に GUI を更新できます

これを修正する方法はありますか?

お返事ありがとうございますthx

みんな私はすでにこれを試していますが、それでもGUIがフリーズします

ここに私のコードがあります

final String key = keywords;
        final int dept = dep;
        final double rele = relevance;

        SwingWorker worker = new SwingWorker<Map, Void>() {
            @Override
            public Map doInBackground() {
                final Map resultMap = focusedCrawlingMain.Search(key, dept, rele);  

                return resultMap;
            }

            public void Done(Map dataMap) {
                final List resultList = (List) dataMap.get("relevantList");
                List resultListValue = (List) dataMap.get("relevantListScore");
                int size = resultList.size();

                newData = new String[size][3];
                for(int i = 0; i < size; i++){
                    newData[i][0] = String.valueOf(i+1);
                    newData[i][1] = String.valueOf(resultList.get(i));
                    newData[i][2] = String.valueOf(resultListValue.get(i));
                    model.addRow((new Object[]{newData[i][0],newData[i][1],newData[i][2]}));
                }
            }
        };
        worker.run();
4

3 に答える 3

4

worker.run() は何らかの問題を引き起こす可能性があると思います。コードを誤解していなければ、実際に worker.execute() を呼び出す必要があります。

また、Done メソッドの計算を可能な限り doInBackground に移動します。Done メソッドは、イベント ディスパッチ スレッドで実行されます。これにより、GUI がフリーズします。これは、長い計算を実行する場合に特に顕著です。

于 2012-11-27T11:16:47.507 に答える
4

SwingWorkerを見る必要があります。

于 2012-01-14T10:39:35.410 に答える
2

メインの GUI スレッドとは別のスレッドで計算を実行できます。これは、 swingアプリケーションでマルチスレッドを実行する際に注意すべきさまざまな事項についても説明している記事です。

于 2012-01-14T10:38:41.113 に答える