0

我有以下简单的例子;

public class TES extends JFrame {

private JPanel contentPane;
private JTextField textField;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TES frame = new TES();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public TES() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 100, 100);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    textField = new JTextField();
    textField.setColumns(10);

    JButton btnNewButton = new JButton("New button");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {


            try {
                System.out.println("Before ");
                textField.setText("Before");
                Thread.sleep(4000);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            textField.setText("After");
        }
    });



    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(
        gl_contentPane.createParallelGroup(Alignment.TRAILING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnNewButton)
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(gl_contentPane.createSequentialGroup()
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
    );
    gl_contentPane.setVerticalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(ComponentPlacement.RELATED, 61, Short.MAX_VALUE)
                .addComponent(btnNewButton)
                .addContainerGap())
    );
    contentPane.setLayout(gl_contentPane);


}

}

textField.settext("Before") 行没有被执行。

            try {
                System.out.println("Before ");
                textField.setText("Before");
                Thread.sleep(4000);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            textField.setText("After");
        }

System.out.println("Before ") 行虽然被执行。我输入 thread.sleep(4000) 只是为了暂停,这样我就可以在 JtextField 中看到“之前”和“之后”文本。在我的原始代码中,我在那个地方运行另一个类;

                                    try {
                System.out.println("Before ");
                textField.setText("Before");
                Functions.dbSet();
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            textField.setText("After");
        }

所以主要问题是 textField.setText("Before"); 行没有被执行。

4

1 回答 1

0

看起来您需要了解 Java 的“事件调度线程”。

看这里:Java Event-Dispatching Thread 解释

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

于 2013-03-08T02:09:57.657 回答