Я пытаюсь заменить символ (и) из файла запятой, чтобы я мог использовать приведенный ниже код для ввода данных в файл JTable
из файла csv. Я попытался сделать это, прочитав файл с StringTokenizer
, и я попытался манипулировать тем, как я его реализую, и я не могу заставить его работать с NullPointerException
. Я понимаю, что он не может найти объект, на который он указывает, но я не вижу, где моя проблема. Любые указатели были бы замечательными, поскольку я застрял на этом часами. Является ли идея чтения с помощью StringTokenizer
лучшей или лучше? Полученная ошибка выглядит следующим образом.Null Pointer Exception при попытке заменить символы из файла
java.lang.NullPointerException at initial.DisplayTableModel.fileImport(DisplayTableModel.java:29) at initial.DisplayTableModel.(DisplayTableModel.java:15) at initial.Display.(Display.java:15) at initial.Display.main(Display.java:27) Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException:/by zero at initial.DisplayTableModel.getRowCount(DisplayTableModel.java:85) at javax.swing.JTable.getRowCount(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.createTableSize(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source) at javax.swing.JComponent.getPreferredSize(Unknown Source) at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source) at java.awt.Container.layout(Unknown Source) at java.awt.Container.doLayout(Unknown Source) at java.awt.Container.validateTree(Unknown Source) at java.awt.Container.validateTree(Unknown Source) at java.awt.Container.validateTree(Unknown Source) at java.awt.Container.validateTree(Unknown Source) at java.awt.Container.validateTree(Unknown Source) at java.awt.Container.validateTree(Unknown Source) at java.awt.Container.validate(Unknown Source) at java.awt.window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$000(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
Есть два других классов, включенные в эту модель, но они не возвращают ошибку, когда секция скобки заменить закомментирована.
package initial;
import javax.swing.table.*;
import java.io.*;
import java.util.*;
@SuppressWarnings("serial")
public class DisplayTableModel extends AbstractTableModel {
protected Vector<String> data;
protected Vector<String> columnNames;
protected String datafile;
public DisplayTableModel(String f) {
datafile = f;
fileImport();
}
public void fileImport() {
String aLine;
data = new Vector<String>();
columnNames = new Vector<String>();
try {
FileInputStream fin = new FileInputStream(datafile);
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
aLine = br.readLine();
String strReplace = ")";
br.readLine().replaceAll(strReplace, ",");
StringTokenizer Yearquote = new StringTokenizer(aLine, ")");
columnNames.addElement(Yearquote.nextToken());
StringTokenizer st1 = new StringTokenizer(br.readLine(), ",");
while (st1.hasMoreTokens()) {
columnNames.addElement(Yearquote.nextToken());
}
// extract data
while (aLine != null) {
if (aLine.startsWith("\"")) {
StringTokenizer addquote = new StringTokenizer(aLine, "\"");
data.addElement(addquote.nextToken());
StringTokenizer st2 = new StringTokenizer(addquote
.nextToken(), ",");
while (st2.hasMoreTokens()) {
data.addElement(st2.nextToken());
}
} else {
StringTokenizer st2 = new StringTokenizer(aLine, ",");
while (st2.hasMoreTokens()) {
data.addElement(st2.nextToken());
}
}
}
br.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public int getRowCount() {
return data.size()/getColumnCount();
}
public int getColumnCount() {
return columnNames.size();
}
public String getColumnName(int columnIndex) {
String colName = "";
if (columnIndex <= getColumnCount()) {
colName = columnNames.elementAt(columnIndex);
}
return colName;
}
public Class<String> getColumnClass(int columnIndex) {
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data.elementAt((rowIndex * getColumnCount()) + columnIndex);
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
return;
}
}
Мммм ... Это не может работать, не даже компиляции: - \ Вы должны переработать ваш пример; o) – Laf