欢迎使用阻塞事件调度线程。
EDT负责处理重涂请求等。您绝不应该执行任何阻止EDT的操作,而应该使用类似
SwingWorker
查看Swing中的并发以了解更多详细信息
更新了示例
import java.awt.BorderLayout;import java.awt.EventQueue;import java.util.List;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.Jtextarea;import javax.swing.SwingWorker;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class Testtextarea03 { public static void main(String[] args) { new Testtextarea03(); } public Testtextarea03() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } Jframe frame = new Jframe("Test"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TestPane extends JPanel { private Jtextarea textarea; private TestPane() { setLayout(new BorderLayout()); textarea = new Jtextarea(10, 10); add(new JScrollPane(textarea)); new TextWorker().execute(); } public class TextWorker extends SwingWorker<Void, String> { @Override protected void process(List<String> chunks) { for (String text : chunks) { textarea.append(text + "n"); } } @Override protected Void doInBackground() throws Exception { Thread.sleep(1000); for (int x = 0; x < 10; x++) { publish(String.valueOf(x)); Thread.sleep(250); } return null; } } }}或摇摆计时器
import java.awt.BorderLayout;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.List;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.Jtextarea;import javax.swing.SwingWorker;import javax.swing.Timer;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class Testtextarea03 { public static void main(String[] args) { new Testtextarea03(); } public Testtextarea03() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } Jframe frame = new Jframe("Test"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TestPane extends JPanel { private Jtextarea textarea; private int x; private TestPane() { setLayout(new BorderLayout()); textarea = new Jtextarea(10, 10); add(new JScrollPane(textarea)); Timer timer = new Timer(250, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { x++; textarea.append(String.valueOf(x) + "n"); } }); timer.setRepeats(true); timer.setCoalesce(true); timer.start(); } } }


