3

私のアプリケーションはJOptionPane、情報の入力のためにいくつかのポイントで s を使用しています。示されていると同時にJOptionPane、ネットワークを介して他のクライアントから行われた変更が GUI で発生する可能性があります。これらは のテキストJTextArea、または のノードの変更JTreeです。

それは、アクティブなJOptionPane間に加えられた変更に問題がないように、新しいスレッドでを作成する必要があるということですか?JOptionPane

インターネットでいくつかの場所を見ましたが、明確な答えが得られませんでした。

psJOptionPaneは、ユーザーがボタンをクリックすると作成されます。

4

2 に答える 2

6

Swing はシングルスレッドであるため、「別のスレッドを使用する」というオプションは単にオプションではありません。ただし、オプション ペインが表示されている間はコンポーネントを更新できないわけではありません。例については、以下を参照してください。JOptionPane 呼び出しがブロックされていることを示すために System.out 呼び出しを追加しましたが、Swing タイマーにより、(EDT 上の) JTextArea にテキストを追加できます。

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.Timer;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class UpdateOptionPane {

  private static void showUI(){
    final JFrame testFrame = new JFrame( "TestFrame" );

    final JTextArea textArea = new JTextArea(  );
    testFrame.add( new JScrollPane( textArea ), BorderLayout.CENTER );

    Timer timer = new Timer( 1000, new ActionListener() {
      @Override
      public void actionPerformed( ActionEvent e ) {
        textArea.append( "bla" );
      }
    } );
    timer.setRepeats( true );
    timer.start();
    JButton button = new JButton( "Click me" );
    button.addActionListener( new ActionListener() {
      @Override
      public void actionPerformed( ActionEvent e ) {
        System.out.println("Before option pane");
        JOptionPane.showMessageDialog( testFrame, "A message dialog" );
        System.out.println("After option pane");
      }
    } );
    testFrame.add( button, BorderLayout.SOUTH );
    testFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    testFrame.pack();
    testFrame.setVisible( true );
  }

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        showUI();
      }
    } );
  }
}
于 2012-04-21T15:42:50.753 に答える
4

JoptionPaneは、実際にはJDialogを設定して使用する簡単な方法です。必要なのは非モーダルJDialogのようです

于 2012-04-21T15:36:02.877 に答える