次のデータを含む .txt ファイルがあります (注: ファイル内のデータは定期的に更新されるため、正確な行数はわかりません)。私の Java アプリケーションは、このデータを JTable に表示します。これが私のtxtファイルです:
root 1 0 0 09:49 ? 00:00:00 init [5]
root 2 0 0 09:49 ? 00:00:00 [kthreadd]
root 3 2 0 09:49 ? 00:00:00 [ksoftirqd/0]
root 4 2 0 09:49 ? 00:00:00 [kworker/0:0]
root 6 2 0 09:49 ? 00:00:00 [migration/0]
root 7 2 0 09:49 ? 00:00:00 [watchdog/0]
私がコーディングしたのは次のとおりです。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class Reader {
public Reader(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream("ProcessList.txt")));
Map<String, Object[]> result = new LinkedHashMap<String, Object[]>();
while(reader.ready()){
String line = reader.readLine();
String[] values = line.split("\\s+");
String key = values [0] +"&"+values[4] +"&"+values[5]+"&"+values[6]+"&"+values[7];
String uid = values [0];
String strtime = values [4];
String tty = values [5];
String etime = values [6];
String command = values [7];
Integer pid = 0;
Integer pri = 0;
Integer uti = 0;
if (result.containsKey(key)) {
pid = (Integer) ((Object[]) result.get(key))[1];
pri = (Integer) ((Object[]) result.get(key))[2];
uti = (Integer) ((Object[]) result.get(key))[3];
}
else {}
result.put(key, new Object[]{uid,pid,pri,uti,strtime,tty,etime,command});
}
ArrayList arrayList = new ArrayList(result.values());
JTable table = new JTable(new PTablemodel(arrayList));
panel.add(new JScrollPane(table));
reader.close();
frame.setContentPane(panel);
frame.setVisible(true);
frame.pack();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
public static void main (String [] args){
new Reader();
}
public class PTablemodel implements TableModel{
final Class[] ColumnClass = new Class[]{String.class, Integer.class, Integer.class,Integer.class, String.class, String.class,String.class, String.class};
final String[] columnname = new String[]{"User","PID","Priority","Utilization","TTY","StartTime","EndTime","Command"};
List values = null;
public PTablemodel (List values){
this.values = values;
}
@Override
public void addTableModelListener(TableModelListener l) {
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return ColumnClass[columnIndex];
}
@Override
public int getColumnCount() {
return ColumnClass.length;
}
@Override
public String getColumnName(int columnIndex) {
return columnname[columnIndex];
}
@Override
public int getRowCount() {
return values.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return ((Object[]) values.get(rowIndex))[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public void removeTableModelListener(TableModelListener l) {
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
}
}
私が得ているのは実際にはエラーではありませんが、例外をキャッチします。誰でも私を案内してもらえますか?「&」をトークナイザーとして使用しました。
注: コンパイラの内容は次のとおりです。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Reader.<init>(Reader.java:30)
at Reader.main(Reader.java:65)