質問編集履歴

7

コード全体を表示

2020/04/12 06:12

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -16,13 +16,149 @@
16
16
 
17
17
  ```Java
18
18
 
19
+ package logViewer;
20
+
21
+
22
+
23
+ import java.awt.BorderLayout;
24
+
25
+ import java.awt.Dimension;
26
+
27
+ import java.awt.event.ActionEvent;
28
+
29
+ import java.awt.event.ActionListener;
30
+
31
+ import java.io.BufferedReader;
32
+
33
+ import java.io.File;
34
+
35
+ import java.io.FileReader;
36
+
37
+ import java.io.IOException;
38
+
39
+
40
+
41
+ import javax.swing.JButton;
42
+
43
+ import javax.swing.JFileChooser;
44
+
45
+ import javax.swing.JOptionPane;
46
+
47
+ import javax.swing.JPanel;
48
+
49
+ import javax.swing.JScrollPane;
50
+
51
+ import javax.swing.JTextArea;
52
+
53
+ import javax.swing.JTextField;
54
+
55
+ import javax.swing.border.TitledBorder;
56
+
57
+
58
+
59
+
60
+
61
+ public class LogPanel2 extends JPanel implements ActionListener,Runnable{
62
+
63
+
64
+
65
+ private JTextArea ta = new JTextArea(); //editer
66
+
67
+ private JTextField tf = null; //title
68
+
69
+ private JButton btn = null; //ボタン
70
+
71
+
72
+
73
+ private static int selected;
74
+
75
+
76
+
77
+ private static File selectedFile;
78
+
79
+
80
+
81
+
82
+
83
+ public LogPanel2() { //logAdd classでcheckBeforeReadfileを使用
84
+
85
+
86
+
87
+ }
88
+
89
+
90
+
91
+ public LogPanel2(String title) {
92
+
93
+ super();
94
+
95
+ this.setLayout(new BorderLayout());
96
+
97
+
98
+
99
+ tf=new JTextField();
100
+
101
+ btn=new JButton("Open");
102
+
103
+
104
+
105
+ //btn.addActionListener(this);
106
+
107
+
108
+
109
+ JPanel pnl=new JPanel();
110
+
111
+ pnl.setLayout(new BorderLayout());
112
+
113
+ pnl.add(tf,BorderLayout.CENTER);
114
+
115
+ pnl.add(btn,BorderLayout.EAST);
116
+
117
+
118
+
119
+ //ta = new JTextArea();
120
+
121
+ JScrollPane sp = new JScrollPane(ta);
122
+
123
+ sp.setAutoscrolls(true);
124
+
125
+
126
+
127
+ this.add(pnl, BorderLayout.NORTH);
128
+
129
+ this.add(sp, BorderLayout.CENTER);
130
+
131
+
132
+
133
+ this.setBorder(new TitledBorder(title));
134
+
135
+ this.setPreferredSize(new Dimension(400,200));
136
+
137
+
138
+
139
+ btn.addActionListener(this);
140
+
141
+
142
+
143
+ }
144
+
145
+
146
+
147
+
148
+
149
+ /* ファイルを開く
150
+
151
+ */
152
+
153
+
154
+
19
155
  public void actionPerformed(ActionEvent e) {
20
156
 
21
157
  JFileChooser filechooser = new JFileChooser();
22
158
 
23
159
 
24
160
 
25
- int selected = filechooser.showOpenDialog(this);
161
+ selected = filechooser.showOpenDialog(this);
26
162
 
27
163
 
28
164
 
@@ -32,11 +168,11 @@
32
168
 
33
169
 
34
170
 
35
- File selectedFile = filechooser.getSelectedFile();
171
+ selectedFile = filechooser.getSelectedFile();
36
-
37
-
38
-
172
+
173
+
174
+
39
- tf.setText("");
175
+ tf.setText("");
40
176
 
41
177
 
42
178
 
@@ -46,79 +182,105 @@
46
182
 
47
183
 
48
184
 
49
-
50
-
51
- try {
52
-
53
- if(checkBeforeReadfile(selectedFile)) {
54
-
55
-
56
-
57
- String str;
58
-
59
-
60
-
61
- BufferedReader br = new BufferedReader(new FileReader(selectedFile));
62
-
63
-
64
-
65
- StringBuilder sb = new StringBuilder();
66
-
67
-
68
-
69
- ta.setText("");
70
-
71
-
72
-
73
- while(true) {
74
-
75
-
76
-
77
-
78
-
79
- while((str = br.readLine()) != null) {
80
-
81
-
82
-
83
- sb.append(str);
84
-
85
- sb.append("\n");
86
-
87
-
88
-
89
-
90
-
91
- System.out.println(str);
92
-
93
-
94
-
95
- }
96
-
97
- System.out.println("null");
98
-
99
-
100
-
101
- ta.setText(new String(sb));
102
-
103
-
104
-
105
- br.close();
185
+ Thread thread = new Thread(new LogPanel2());
186
+
187
+ thread.start();
188
+
189
+ }
190
+
191
+
192
+
193
+
194
+
195
+ }
196
+
197
+
198
+
199
+
200
+
201
+ public static boolean checkBeforeReadfile(File file) {
202
+
203
+ if(file.exists()) {
204
+
205
+ if(file.isFile() && file.canRead()) {
206
+
207
+ return true;
208
+
209
+ }
210
+
211
+ }
212
+
213
+
214
+
215
+ return false;
216
+
217
+
218
+
219
+ }
220
+
221
+
222
+
223
+ public void run() {
224
+
225
+
226
+
227
+
228
+
229
+ try {
230
+
231
+ if(checkBeforeReadfile(selectedFile)) {
232
+
233
+
234
+
235
+ String str;
236
+
237
+
238
+
239
+ BufferedReader br = new BufferedReader(new FileReader(selectedFile));
240
+
241
+
242
+
243
+ //StringBuilder sb = new StringBuilder();
244
+
245
+
246
+
247
+ ta.setText("AA");
248
+
249
+
250
+
251
+ while((str = br.readLine()) != null) {
252
+
253
+
254
+
255
+ ta.append(str);
256
+
257
+ ta.append("\n");
258
+
259
+
260
+
261
+
262
+
263
+ System.out.println(str);
106
264
 
107
265
 
108
266
 
109
267
  }
110
268
 
111
- }
112
-
113
-
114
-
115
-
116
-
117
- } catch(IOException err) {
118
-
119
-
120
-
121
- JOptionPane.showMessageDialog(this,"IOException: ファイルを開くのに失敗しました。");
269
+ System.out.println("null");
270
+
271
+
272
+
273
+ //ta.setText(new String(sb));
274
+
275
+
276
+
277
+ br.close();
278
+
279
+
280
+
281
+ }else {
282
+
283
+ System.out.println("null");
122
284
 
123
285
  }
124
286
 
@@ -126,188 +288,26 @@
126
288
 
127
289
 
128
290
 
291
+ } catch(IOException err) {
292
+
293
+
294
+
295
+ JOptionPane.showMessageDialog(this,"IOException: ファイルを開くのに失敗しました。");
296
+
129
297
  }
130
298
 
299
+
300
+
301
+
302
+
303
+ }
304
+
305
+
306
+
307
+
308
+
309
+ }
310
+
311
+
312
+
131
313
  ```
132
-
133
-
134
-
135
- #修正点
136
-
137
- 別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。
138
-
139
- ta.setTextやta.appendを使用してもTextAreaに文字列が表示されません。
140
-
141
-
142
-
143
- ```Java
144
-
145
- private JTextArea ta = new JTextArea(); //editer
146
-
147
- private JTextField tf = null; //title
148
-
149
- private JButton btn = null; //ボタン
150
-
151
-
152
-
153
- private static int selected;
154
-
155
-
156
-
157
- private static File selectedFile;
158
-
159
-   //↑グローバル変数
160
-
161
-
162
-
163
- public void actionPerformed(ActionEvent e) {
164
-
165
- JFileChooser filechooser = new JFileChooser();
166
-
167
-
168
-
169
- selected = filechooser.showOpenDialog(this);
170
-
171
-
172
-
173
- if (JFileChooser.APPROVE_OPTION == selected) {
174
-
175
-
176
-
177
-
178
-
179
- selectedFile = filechooser.getSelectedFile();
180
-
181
-
182
-
183
- tf.setText("");
184
-
185
-
186
-
187
- String strFileName = selectedFile.getName();
188
-
189
- tf.setText(strFileName);
190
-
191
-
192
-
193
- Thread thread = new Thread(new LogPanel2());
194
-
195
- thread.start();
196
-
197
- }
198
-
199
-
200
-
201
-
202
-
203
- }
204
-
205
-
206
-
207
-
208
-
209
- public static boolean checkBeforeReadfile(File file) {
210
-
211
- if(file.exists()) {
212
-
213
- if(file.isFile() && file.canRead()) {
214
-
215
- return true;
216
-
217
- }
218
-
219
- }
220
-
221
-
222
-
223
- return false;
224
-
225
-
226
-
227
- }
228
-
229
-
230
-
231
- public void run() {
232
-
233
-
234
-
235
-
236
-
237
- try {
238
-
239
- if(checkBeforeReadfile(selectedFile)) {
240
-
241
-
242
-
243
- String str;
244
-
245
-
246
-
247
- BufferedReader br = new BufferedReader(new FileReader(selectedFile));
248
-
249
-
250
-
251
- //StringBuilder sb = new StringBuilder();
252
-
253
-
254
-
255
- ta.setText("AA");
256
-
257
-
258
-
259
- while((str = br.readLine()) != null) {
260
-
261
-
262
-
263
- ta.append(str);
264
-
265
- ta.append("\n");
266
-
267
-
268
-
269
-
270
-
271
- System.out.println(str);
272
-
273
-
274
-
275
- }
276
-
277
- System.out.println("null");
278
-
279
-
280
-
281
- //ta.setText(new String(sb));
282
-
283
-
284
-
285
- br.close();
286
-
287
-
288
-
289
- }else {
290
-
291
- System.out.println("null");
292
-
293
- }
294
-
295
-
296
-
297
-
298
-
299
- } catch(IOException err) {
300
-
301
-
302
-
303
- JOptionPane.showMessageDialog(this,"IOException: ファイルを開くのに失敗しました。");
304
-
305
- }
306
-
307
-
308
-
309
-
310
-
311
- }
312
-
313
- ```

6

修正点の変更

2020/04/12 06:11

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -134,15 +134,15 @@
134
134
 
135
135
  #修正点
136
136
 
137
- 別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。また、ファイルを開くと以下のようなエラーメッセージが出ます。
137
+ 別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。
138
-
138
+
139
- エラーメッセージを読むと、ta.setText("");の部分でエラー起きてい
139
+ ta.setTextやta.appendを使用してもTextAreaに文字列表示されせん
140
140
 
141
141
 
142
142
 
143
143
  ```Java
144
144
 
145
- private JTextArea ta = null; //editer
145
+ private JTextArea ta = new JTextArea(); //editer
146
146
 
147
147
  private JTextField tf = null; //title
148
148
 
@@ -160,7 +160,7 @@
160
160
 
161
161
 
162
162
 
163
- public void actionPerformed(ActionEvent e) {
163
+ public void actionPerformed(ActionEvent e) {
164
164
 
165
165
  JFileChooser filechooser = new JFileChooser();
166
166
 
@@ -248,15 +248,11 @@
248
248
 
249
249
 
250
250
 
251
- StringBuilder sb = new StringBuilder();
251
+ //StringBuilder sb = new StringBuilder();
252
-
253
-
254
-
252
+
253
+
254
+
255
- ta.setText("");
255
+ ta.setText("AA");
256
-
257
-
258
-
259
-
260
256
 
261
257
 
262
258
 
@@ -264,9 +260,9 @@
264
260
 
265
261
 
266
262
 
267
- sb.append(str);
263
+ ta.append(str);
268
-
264
+
269
- sb.append("\n");
265
+ ta.append("\n");
270
266
 
271
267
 
272
268
 
@@ -278,9 +274,11 @@
278
274
 
279
275
  }
280
276
 
281
-
277
+ System.out.println("null");
282
-
278
+
279
+
280
+
283
- ta.setText(new String(sb));
281
+ //ta.setText(new String(sb));
284
282
 
285
283
 
286
284
 
@@ -313,13 +311,3 @@
313
311
  }
314
312
 
315
313
  ```
316
-
317
- ```エラーメッセージ
318
-
319
- Exception in thread "Thread-4" java.lang.NullPointerException
320
-
321
- at logViewer.LogPanel2.run(LogPanel2.java:115)
322
-
323
- at java.lang.Thread.run(Thread.java:748)
324
-
325
- ```

5

修正点追記

2020/04/12 06:10

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -136,6 +136,8 @@
136
136
 
137
137
  別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。また、ファイルを開くと以下のようなエラーメッセージが出ます。
138
138
 
139
+ エラーメッセージを読むと、ta.setText("");の部分でエラーが起きています。
140
+
139
141
 
140
142
 
141
143
  ```Java

4

エラーメッセージの記載

2020/04/11 16:39

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -134,7 +134,7 @@
134
134
 
135
135
  #修正点
136
136
 
137
- 別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。
137
+ 別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。また、ファイルを開くと以下のようなエラーメッセージが出ます。
138
138
 
139
139
 
140
140
 
@@ -311,3 +311,13 @@
311
311
  }
312
312
 
313
313
  ```
314
+
315
+ ```エラーメッセージ
316
+
317
+ Exception in thread "Thread-4" java.lang.NullPointerException
318
+
319
+ at logViewer.LogPanel2.run(LogPanel2.java:115)
320
+
321
+ at java.lang.Thread.run(Thread.java:748)
322
+
323
+ ```

3

コード修正

2020/04/11 15:45

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -154,7 +154,7 @@
154
154
 
155
155
  private static File selectedFile;
156
156
 
157
-
157
+   //↑グローバル変数
158
158
 
159
159
 
160
160
 

2

コードの修正点を追記

2020/04/11 15:37

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -129,3 +129,185 @@
129
129
  }
130
130
 
131
131
  ```
132
+
133
+
134
+
135
+ #修正点
136
+
137
+ 別スレッドで実装しました。しかし、TextAreaにテキストが表示されませんでした。
138
+
139
+
140
+
141
+ ```Java
142
+
143
+ private JTextArea ta = null; //editer
144
+
145
+ private JTextField tf = null; //title
146
+
147
+ private JButton btn = null; //ボタン
148
+
149
+
150
+
151
+ private static int selected;
152
+
153
+
154
+
155
+ private static File selectedFile;
156
+
157
+
158
+
159
+
160
+
161
+ public void actionPerformed(ActionEvent e) {
162
+
163
+ JFileChooser filechooser = new JFileChooser();
164
+
165
+
166
+
167
+ selected = filechooser.showOpenDialog(this);
168
+
169
+
170
+
171
+ if (JFileChooser.APPROVE_OPTION == selected) {
172
+
173
+
174
+
175
+
176
+
177
+ selectedFile = filechooser.getSelectedFile();
178
+
179
+
180
+
181
+ tf.setText("");
182
+
183
+
184
+
185
+ String strFileName = selectedFile.getName();
186
+
187
+ tf.setText(strFileName);
188
+
189
+
190
+
191
+ Thread thread = new Thread(new LogPanel2());
192
+
193
+ thread.start();
194
+
195
+ }
196
+
197
+
198
+
199
+
200
+
201
+ }
202
+
203
+
204
+
205
+
206
+
207
+ public static boolean checkBeforeReadfile(File file) {
208
+
209
+ if(file.exists()) {
210
+
211
+ if(file.isFile() && file.canRead()) {
212
+
213
+ return true;
214
+
215
+ }
216
+
217
+ }
218
+
219
+
220
+
221
+ return false;
222
+
223
+
224
+
225
+ }
226
+
227
+
228
+
229
+ public void run() {
230
+
231
+
232
+
233
+
234
+
235
+ try {
236
+
237
+ if(checkBeforeReadfile(selectedFile)) {
238
+
239
+
240
+
241
+ String str;
242
+
243
+
244
+
245
+ BufferedReader br = new BufferedReader(new FileReader(selectedFile));
246
+
247
+
248
+
249
+ StringBuilder sb = new StringBuilder();
250
+
251
+
252
+
253
+ ta.setText("");
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+ while((str = br.readLine()) != null) {
262
+
263
+
264
+
265
+ sb.append(str);
266
+
267
+ sb.append("\n");
268
+
269
+
270
+
271
+
272
+
273
+ System.out.println(str);
274
+
275
+
276
+
277
+ }
278
+
279
+
280
+
281
+ ta.setText(new String(sb));
282
+
283
+
284
+
285
+ br.close();
286
+
287
+
288
+
289
+ }else {
290
+
291
+ System.out.println("null");
292
+
293
+ }
294
+
295
+
296
+
297
+
298
+
299
+ } catch(IOException err) {
300
+
301
+
302
+
303
+ JOptionPane.showMessageDialog(this,"IOException: ファイルを開くのに失敗しました。");
304
+
305
+ }
306
+
307
+
308
+
309
+
310
+
311
+ }
312
+
313
+ ```

1

誤字修正

2020/04/11 15:33

投稿

man_
man_

スコア45

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  #現在の課題
8
8
 
9
- 以下にコードのTextAreaに表示する部分を示します。
9
+ 以下にTextAreaにテキストファイルの文章を表示する部分のコードを示します。
10
10
 
11
11
  JFrameのTextAreaに無限ループを使用して文字列が追加されるたびに文字列を追記で表示したいのですが、現段階の課題として、無限ループを使用するとTextAreaに文字が表示されません。
12
12