int idealSize = 1000;
int maxExcess = 500;
int excess = textArea.getDocument().getLength() - idealSize;
if (excess >= maxExcess) {
textArea.replaceRange("", 0, excess);
}
int maxExcess = 500;
int excess = textArea.getDocument().getLength() - idealSize;
if (excess >= maxExcess) {
textArea.replaceRange("", 0, excess);
}
this.jTextArea.setText("");
}
this.jTextArea.append(str + "\n");
this.jTextArea.setSelectionStart(this.jTextArea.getText().length());
import java.awt.event.*;
import javax.swing.*;
import java.util.concurrent.atomic.AtomicInteger;public class JTextAreaExample {
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable(){
@Override public void run(){
final JFrame frame = new JFrame("JTextArea Example");
final JTextArea input = new JTextArea();
final JScrollPane scroller = new JScrollPane(input);
final Timer timer = new Timer(10, new ActionListener(){
private final AtomicInteger counter = new AtomicInteger(0);
@Override public void actionPerformed(ActionEvent event){
if(input.getLineCount() > 2000) input.setText("");
input.append(String.format("%s %d%n","Hello", counter.incrementAndGet()));
}
});
frame.add(scroller);
frame.setPreferredSize(new Dimension(600,400));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
@Override public void windowOpened(WindowEvent event){
timer.start();
}
@Override public void windowClosing(WindowEvent event){
timer.stop();
}
});
}
});
}
}
this.jTextArea.setText("");
}
this.jTextArea.append(str + "\n");
this.jTextArea.setSelectionStart(this.jTextArea.getText().length());
this.jTextArea.setText("");
}
this.jTextArea.append(str + "\n");
this.jTextArea.setSelectionStart(this.jTextArea.getText().length()); 5L 不是给你测试了吗,1w多行都没问题,2000行怎么会有问题呢
this.jTextArea.setText("");
}
this.jTextArea.append(str + "\n");
this.jTextArea.setSelectionStart(this.jTextArea.getText().length()); 5L 不是给你测试了吗,1w多行都没问题,2000行怎么会有问题呢
我的程序同时开着10+个线程类,内容要>>1w,问题的关键在于程序最终导致OOM,引起程序崩溃。我想请教的是,这段程序为什么会导致OOM.
在EDT里执行耗时的操作,会让界面响应变慢,甚至失去响应(假死)
在EDT里执行耗时的操作,会让界面响应变慢,甚至失去响应(假死)
谢谢指教~
不过我这边出现程序卡死的原因是内存溢出导致的,而不是由于执行耗时任务的操作导致的响应太慢以致假死。
我只是要用JTextArea实时输出每个线程的执行情况,现在把JTextArea.append("XXX")改成了JTextArea.setText("XXX"),貌似可以解决目前的问题,但是不得问题的要领,郁闷!