2

私はJavaアプリを作成しようとしています.Swingを使用してユーザーから入力データを取得した後、プログラムのメインの計算チャンクを実行し始めます(明確にするためのメインメソッドではありません)。このメソッドの実行中に、「お待ちください...何も触れないでください」という行に沿って何かを表示したいのですが、問題は、これを表示するために使用しているJPanelがメソッドの実行中に完全に黒くなることです計算を行っているのは実行中です。メソッドの途中で JLabel.getText() を印刷しようとしましたが、想定どおりに出力されます。テキストが表示されない理由についてのアイデア。以下は私のコードです。

JFrame toDisplay = new JFrame("Please Wait");
  toDisplay.setAlwaysOnTop(true);
  toDisplay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  toDisplay.setVisible(true);
  toDisplay.setLayout(new FlowLayout());
  toDisplay.setSize(300,200);
  toDisplay.setLocation((int)dimension.getWidth()/3, (int)dimension.getHeight()/3);

  JLabel message = new JLabel("<html>CheapTix is currently running<br /> please do not close this box or open the file <br /> Destinations.txt <br /> until instructed to do so</html>");
  toDisplay.add(message,BorderLayout.CENTER);

これに続いて、実行中のプログラムの主要な部分が続きます。プログラムの主要部分の中に toDisplay.add(message) を入れようとしましたが、これもうまくいかなかったようです。どんな助けでも大歓迎です。

4

1 に答える 1

5

あなたの問題は、Swing の並行性が原因です。Swing イベント スレッドで実行時間の長いプロセスを実行しているため、イベント スレッドが描画されません。解決策: SwingWorker などのバックグラウンド スレッドを使用します。

詳細については、Swing での同時実行を参照してください。

また、

JFrame toDisplay = new JFrame("Please Wait");
  toDisplay.setAlwaysOnTop(true);
  toDisplay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  toDisplay.setVisible(true);
  toDisplay.setLayout(new FlowLayout());
  toDisplay.setSize(300,200);
  toDisplay.setLocation((int)dimension.getWidth()/3, (int)dimension.getHeight()/3);

  JLabel message = new JLabel("<html>CheapTix is currently running<br /> 
      please do not close this box or open the file <br /> 
      Destinations.txt <br /> 
      until instructed to do so</html>");
  toDisplay.add(message,BorderLayout.CENTER);
  • これは、セカンダリ ウィンドウを JFrame として表示しているように見えますが、これはお勧めできません。代わりに JDialog を使用してください。
  • コンポーネントのサイズを設定するのではなく、コンポーネント自体にサイズを設定させます。
于 2013-07-10T00:09:35.473 に答える