Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从.txtfile填充JTable_Java_Swing_User Interface_File Io_Jtable - Fatal编程技术网

Java 无法从.txtfile填充JTable

Java 无法从.txtfile填充JTable,java,swing,user-interface,file-io,jtable,Java,Swing,User Interface,File Io,Jtable,我有一个包含以下数据的.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 [k

我有一个包含以下数据的.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) {
        }
    }
}
导入java.io.BufferedReader;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.LinkedHashMap;
导入java.util.List;
导入java.util.Map;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.event.TableModelListener;
导入javax.swing.table.TableModel;
公共类阅读器{
公众读者(){
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel面板=新的JPanel();
缓冲读取器;
试一试{
reader=新的BufferedReader(新的InputStreamReader(新的文件InputStream(“ProcessList.txt”));
映射结果=新建LinkedHashMap();
while(reader.ready()){
字符串行=reader.readLine();
字符串[]值=行。拆分(\\s+);
字符串键=值[0]+“&”+值[4]+“&”+值[5]+“&”+值[6]+“&”+值[7];
字符串uid=值[0];
字符串strtime=值[4];
字符串tty=值[5];
字符串时间=值[6];
字符串命令=值[7];
整数pid=0;
整数pri=0;
整数uti=0;
if(结果容器(键)){
pid=(整数)((对象[])result.get(键))[1];
pri=(整数)((Object[])result.get(key))[2];
uti=(整数)((Object[])result.get(key))[3];
}
else{}
put(key,新对象[]{uid,pid,pri,uti,strtime,tty,etime,command});
}
ArrayList ArrayList=新的ArrayList(result.values());
JTable table=newjtable(newptablemodel(arrayList));
添加(新的JScrollPane(表));
reader.close();
frame.setContentPane(面板);
frame.setVisible(true);
frame.pack();
}
catch(filenotfounde异常){
e、 printStackTrace();
}
捕获(IOE异常){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
新读者();
}
公共类PTablemodel实现了TableModel{
最终类[]ColumnClass=新类[]{String.Class,Integer.Class,Integer.Class,String.Class,String.Class,String.Class,String.Class,String.Class};
最终字符串[]columnname=新字符串[]{“用户”、“PID”、“优先级”、“利用率”、“TTY”、“开始时间”、“结束时间”、“命令”};
列表值=空;
公共PTablemodel(列表值){
这个值=值;
}
@凌驾
公共void addTableModelListener(TableModelListener l){
}
@凌驾
公共类getColumnClass(int columnIndex){
返回ColumnClass[columnIndex];
}
@凌驾
public int getColumnCount(){
返回ColumnClass.length;
}
@凌驾
公共字符串getColumnName(int columnIndex){
返回columnname[columnIndex];
}
@凌驾
public int getRowCount(){
返回值。size();
} 
@凌驾
公共对象getValueAt(int行索引、int列索引){
返回((对象[])值。获取(行索引))[columnIndex];
}
@凌驾
公共布尔值isCellEditable(int-rowIndex、int-columnIndex){
返回false;
}
@凌驾
公共void removeTableModelListener(TableModelListener l){
}
@凌驾
public void setValueAt(对象有效、int行索引、int列索引){
}
}
}
我得到的不是错误,而是捕获了异常。有人能指导我吗?我使用了“&”作为标记符

注意:编译器是这样说的:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Reader.<init>(Reader.java:30)
at Reader.main(Reader.java:65)
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:4 at Reader.(Reader.java:30) at Reader.main(Reader.java:65)
此代码是基于您的SSCCE的代码,表明它是文件读取代码中的某个内容

输出 代码
package test.t100.t001;
导入java.io.*;
导入java.util.*;
导入javax.swing.*;
导入javax.swing.event.TableModelListener;
导入javax.swing.table.TableModel;
公共类阅读器{
静态字符串name=“ProcessList”;
公共读取器(字符串名称){
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel面板=新的JPanel();
缓冲读取器;
试一试{
文件f=新文件(名称);
System.out.println(“文件-存在:+f.exists()+”+f.getAbsolutePath());
读卡器=新的BufferedReader(
新的InputStreamReader(
新文件输入流(f));
映射结果=新建LinkedHashMap();
while(reader.ready()){
字符串行=reader.readLine();
字符串[]值=行。拆分(\\s+);
字符串键=值[0]+“&”+值[4]+“&”+值[5]+“&”+值[6]+“&”+值[7];
字符串uid=值[0];
字符串strtime=值[4];
字符串tty=值[5];
字符串时间=值[6];
字符串命令=值[7];
整数pid=0;
整数pri=0;
整数uti=0;
if(结果容器(键)){
pid=(英寸)
File - exists: true I:\projects\eclipse\Test\ProcessList.txt
Frame is visible
File - exists: false I:\projects\eclipse\Test\ProcessList1.txt
java.io.FileNotFoundException: ProcessList1.txt (The system cannot find the file specified)
     ...
package test.t100.t001;

import java.io.*;
import java.util.*;

import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class Reader {

    static String name = "ProcessList";

    public Reader(String name){
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        BufferedReader reader;
        try {
            File f = new File(name);
            System.out.println("File - exists: " + f.exists() + " " + f.getAbsolutePath());
            reader = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream(f)));
            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();
            System.out.println("Frame is visible");
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();        
        }
        catch(IOException e) {
            e.printStackTrace();
        }

    }
    public static void main (String [] args) throws IOException{
        String s = 
                "root         1     0  0 09:49 ?        00:00:00 init [5]\n" +  
                "root         2     0  0 09:49 ?        00:00:00 [kthreadd]\n" +
                "root         3     2  0 09:49 ?        00:00:00 [ksoftirqd/0]\n" +
                "root         4     2  0 09:49 ?        00:00:00 [kworker/0:0]\n" +
                "root         6     2  0 09:49 ?        00:00:00 [migration/0]\n" +
                "root         7     2  0 09:49 ?        00:00:00 [watchdog/0]\n";
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        FileOutputStream fos = new FileOutputStream(name + ".txt");
        fos.write(s.getBytes());
        new Reader(name + ".txt");
        new Reader(name + "1.txt");
    }
    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) {
        }
    }
}
while((String line = reader.readLine())!=null) {
     ...
}