Может кто-нибудь объяснить мне, почему мое приложение начинает зависать, если я пытаюсь добавить текст в JTextArea после чтения файла BufferedReader?
Хорошо.Я использую GUI Designer, и у меня есть этот класс
public class ReaderTest {
private JPanel rootPanel;
private JTextArea textArea;
private JButton readButton;
private File file;
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Reader");
frame.setContentPane(new ReaderTest().rootPanel);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setVisible(true);
});
}
private ReaderTest() {
readButton.addActionListener(e -> {
file = new File("/path/to/6.3MBfile");
new Thread(new FileReader()).start();
});
}
class FileReader implements Runnable {
@Override
public void run() {
reader1();
// reader2();
}
private void reader1() {
try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) {
int count;
StringBuilder str = new StringBuilder();
while ((count = inputStream.read()) != -1) {
str.append((char) count);
}
textArea.setText(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
private void reader2() {
try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
String line;
StringBuilder str = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
str.append(line);
}
textArea.setText(str.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Если я читаю файл с помощью BufferedInputStream (reader1), у меня нет зависаний.Но если я читаю его с помощью BufferedReader (reader2), я получаю некоторые зависания.Кроме того, мой компьютер начинает зависать через одну минуту, и я не могу просто остановить свое приложение.