#実現したいこと
JavaでTextAreaに表示したテキストを文字列が追加されるたびに自動で更新したい。
#現在の課題
以下にTextAreaにテキストファイルの文章を表示する部分のコードを示します。
JFrameのTextAreaに無限ループを使用して文字列が追加されるたびに文字列を追記で表示したいのですが、現段階の課題として、無限ループを使用するとTextAreaに文字が表示されません。
有識者の方々ご協力お願いします
Java
1 package logViewer; 2 3import java.awt.BorderLayout; 4import java.awt.Dimension; 5import java.awt.event.ActionEvent; 6import java.awt.event.ActionListener; 7import java.io.BufferedReader; 8import java.io.File; 9import java.io.FileReader; 10import java.io.IOException; 11 12import javax.swing.JButton; 13import javax.swing.JFileChooser; 14import javax.swing.JOptionPane; 15import javax.swing.JPanel; 16import javax.swing.JScrollPane; 17import javax.swing.JTextArea; 18import javax.swing.JTextField; 19import javax.swing.border.TitledBorder; 20 21 22public class LogPanel2 extends JPanel implements ActionListener,Runnable{ 23 24 private JTextArea ta = new JTextArea(); //editer 25 private JTextField tf = null; //title 26 private JButton btn = null; //ボタン 27 28 private static int selected; 29 30 private static File selectedFile; 31 32 33 public LogPanel2() { //logAdd classでcheckBeforeReadfileを使用 34 35 } 36 37 public LogPanel2(String title) { 38 super(); 39 this.setLayout(new BorderLayout()); 40 41 tf=new JTextField(); 42 btn=new JButton("Open"); 43 44 //btn.addActionListener(this); 45 46 JPanel pnl=new JPanel(); 47 pnl.setLayout(new BorderLayout()); 48 pnl.add(tf,BorderLayout.CENTER); 49 pnl.add(btn,BorderLayout.EAST); 50 51 //ta = new JTextArea(); 52 JScrollPane sp = new JScrollPane(ta); 53 sp.setAutoscrolls(true); 54 55 this.add(pnl, BorderLayout.NORTH); 56 this.add(sp, BorderLayout.CENTER); 57 58 this.setBorder(new TitledBorder(title)); 59 this.setPreferredSize(new Dimension(400,200)); 60 61 btn.addActionListener(this); 62 63 } 64 65 66 /* ファイルを開く 67 */ 68 69 public void actionPerformed(ActionEvent e) { 70 JFileChooser filechooser = new JFileChooser(); 71 72 selected = filechooser.showOpenDialog(this); 73 74 if (JFileChooser.APPROVE_OPTION == selected) { 75 76 77 selectedFile = filechooser.getSelectedFile(); 78 79 tf.setText(""); 80 81 String strFileName = selectedFile.getName(); 82 tf.setText(strFileName); 83 84 Thread thread = new Thread(new LogPanel2()); 85 thread.start(); 86 } 87 88 89 } 90 91 92 public static boolean checkBeforeReadfile(File file) { 93 if(file.exists()) { 94 if(file.isFile() && file.canRead()) { 95 return true; 96 } 97 } 98 99 return false; 100 101 } 102 103 public void run() { 104 105 106 try { 107 if(checkBeforeReadfile(selectedFile)) { 108 109 String str; 110 111 BufferedReader br = new BufferedReader(new FileReader(selectedFile)); 112 113 //StringBuilder sb = new StringBuilder(); 114 115 ta.setText("AA"); 116 117 while((str = br.readLine()) != null) { 118 119 ta.append(str); 120 ta.append("\n"); 121 122 123 System.out.println(str); 124 125 } 126 System.out.println("null"); 127 128 //ta.setText(new String(sb)); 129 130 br.close(); 131 132 }else { 133 System.out.println("null"); 134 } 135 136 137 } catch(IOException err) { 138 139 JOptionPane.showMessageDialog(this,"IOException: ファイルを開くのに失敗しました。"); 140 } 141 142 143 } 144 145 146} 147
回答2件
あなたの回答
tips
プレビュー