我需要从arduino读取数据并将其发送到表格。 我尝试了我在互联网上找到的所有解决方案,但我的程序仍然没有显示表格。我认为问题在于metod getColumnCount(),但我无法解决它。我是编程的新手,我可能犯了一些愚蠢的错误,所以我很抱歉打扰,但我不能单独处理它。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
public class SerialTest extends JPanel implements SerialPortEventListener {
/**
*
*/
private static final long serialVersionUID = 1L;
SerialPort serialPort;
public static ArrayList<String> header;
public static ArrayList<ArrayList<String>> dataList;
private static final String PORT_NAMES[]={"/dev/tty.usbserial-A9007UX1", "/dev/ttyACM0", "/dev/ttyUSB0", "COM8"};
private BufferedReader input;
private OutputStream output;
private static final int TIME_OUT=200;
private static final int DATA_RATE=9600;
public void initialize(){
System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");
CommPortIdentifier portId=null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
while(portEnum.hasMoreElements()){
CommPortIdentifier currPortId=(CommPortIdentifier)portEnum.nextElement();
for(String portName : PORT_NAMES){
if(currPortId.getName().equals(portName)){
portId=currPortId;
break;
}
}
}
if(portId==null){
System.out.println("Could non find COM port");
return;
}
try {
serialPort=(SerialPort)portId.open(this.getClass().getName(),TIME_OUT);
serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
input=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output=serialPort.getOutputStream();
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
serialPort.disableReceiveTimeout();
serialPort.enableReceiveThreshold(1);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println(e.toString());
}
}
public synchronized void close(){
if(serialPort != null){
serialPort.removeEventListener();
serialPort.close();
}
}
@Override
public void serialEvent(SerialPortEvent oEvent) {
if(oEvent.getEventType()==SerialPortEvent.DATA_AVAILABLE){
try{
dataList=new ArrayList<ArrayList<String>>();
String inputLine=input.readLine();
String[] rows=inputLine.split(",");
for(String row: rows){
row=row.trim();
ArrayList<String> lista=new ArrayList<String>();
lista.addAll(Arrays.asList(row.split("\n")));
dataList.add(lista);
header=new ArrayList<String>();
header.add("PWM");
header.add("Uin");
header.add("Uout");
}
}catch(Exception e){
System.err.println(e.toString());
}
}
}
public static void main(String[] args) throws Exception {
JFrame frame=new JFrame("Table");
SerialTest main=new SerialTest();
JTable table=new JTable(main.new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500,70));
table.setFillsViewportHeight(true);
JScrollPane scrollPane=new JScrollPane();
frame.add(scrollPane);
frame.setSize(300, 200);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.initialize();
Thread t=new Thread(){
public void run(){
try{Thread.sleep(100000);}catch(InterruptedException ie){}
}
};
t.start();
}
class MyTableModel extends AbstractTableModel{
/**
*
*/
private static final long serialVersionUID = 1L;
//ArrayList<String> header;
//ArrayList<ArrayList<String>> dataList;
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return dataList.size();
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return header.size();
}
@Override
public Object getValueAt(int row, int column) {
return ((ArrayList<String>) dataList.get(row)).get(column);
}
}
}
我有错误
Exception in thread "main" java.lang.NullPointerException
at SerialTest$MyTableModel.getColumnCount(SerialTest.java:157)
at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1285)
at javax.swing.JTable.tableChanged(JTable.java:4386)
at javax.swing.JTable.setModel(JTable.java:3688)
at javax.swing.JTable.<init>(JTable.java:632)
at javax.swing.JTable.<init>(JTable.java:573)
at SerialTest.main(SerialTest.java:116)