2016-07-21 5 views
1

スイングアプリに問題があります。最小化すればスイングアプリがクラッシュする

これは、forループを内部に持つSwingWorkerです。これは、300+ oracleデータベース要求を起動し、いくつかの結果をJTableに入力します。

スイングアプリのウィンドウが最小化されていない場合、またはWindowsエクスプローラで少なくとも部分的に表示されている場合、バッチは正常に完了します。さて、私は、アプリを最小化し、スイングアプリに戻って、それは凍結されます。

コンポーネントの基本的な輪郭と色が表示されますが、ほとんどのウィンドウは背景色(黒色)に設定され、テキストは表示されません。アプリを殺す唯一の方法は、「X」ボタンをクリックしてもウィンドウを閉じることができないため、プロセスを強制終了することです。

これはよくある問題ですか?どのようにそれを防ぐのですか?バッチ作業員の内部

ループ:

for(int i=1; i<=maxDepth; i++){ 
    String[] result = getAllLists(database, i); 
    for(int j=0; j<result.length; j++){ 
     String period=result[j]; 
     for(String name : names){ 
      System.out.println("New Query: "+name+ " " + period + " | " + "Loading " + (days) + " days x " + years + " years --- "); 
      if(isValid(period,name)){ 
       List<TickHistory> queryResult = model.getByDaysMultiple(name,period,days+mod+daysHeadroom,years, false); 
       getModelTableData(name, period, DatabaseHelpers.dateToString(lastCob), years,days,queryResult); 
       populatePricesTable(queryResult, days, false); 
       view.setNameText(name); 
       view.setPeriodText(period); 
      }else{ 
       System.out.println("query invalid"); 
      } 
     } 
    } 
} 
+1

いくつかのコードを教えてください。おそらく 'SwingUtilities.invokeLater()'が不足しています。 jvisualvmでアプリをチェックすることも役に立ちます。 –

+1

例外はありますか? 'publish'と' process'を正しく使っていますか? –

+0

@TamasRevメインフレーム、コントローラ、およびデータベースに接続するために使用するオブジェクトを作成するメインプロセスでinvokelaterを使用します。 – LucasSeveryn

答えて

3

私はどこでも私のコードでpublishprocessを使用しないでください。

これはおそらく問題の原因です。 SwingWorkerpublish()doInBackground()に呼び出し、process()を使用してイベントディスパッチスレッドのTableModelを更新します。完全な例は、hereです。

image

+0

バッチ作業員の内部から質問にループを追加しました。 'getByDaysMultiple'メソッドを見れば、データベースからデータを取り込みます。次に' getModelTableData'がいくつかのリクエストを発生させ、次に 'populatePricesTable'がJTableを埋め込みます。私の最初のスイングアプリなので、あなたの説明に感謝します。 – LucasSeveryn

+0

'TableModel'を' doInBackground() 'から更新してはいけません。 [turorial cited](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/interim.html)に示されているように、コードを中間結果に 'publish() 'するためにコードを再作成する必要があります。問題がある場合は、あなたのアプローチを示す[example cited](http://stackoverflow.com/a/34742409/230513)に基づいて[mcve]を含めるように質問を編集してください。 – trashgod

関連する問題