- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试将工具提示添加到我的 JTable 标题中。在本例中,我使用 TTHeader 类,它扩展了 JTableHeader Java 类。一切似乎都很好,但是当我尝试将新的 TTHeader header 添加到我的 JTable 时,我得到了 NullPointerException 且来源未知。我不知道为什么。 TTHeader 类似乎没问题。问题出在其他地方。
这是我的方法的代码。对于 JTable 填充:
private JPanel contentPane;
private JScrollPane scrollPane;
private JTable table;
private String tooltipsSDB[] = {"SessionID", "UserID", "PatientID", "PluginID", "Date", "Time"};
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
Table() {
// Connection Component
conn = ConnectionJDBC.ConnectDB();
setTitle("My sample table");
setSize(new Dimension(400, 400));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable() {
public boolean isCellEditable(int row, int column) {
return false;
};
};
table.setAutoCreateRowSorter(true);
// Populate JTable with data from SQL DB
populateTable();
scrollPane.setViewportView(table);
}
public void populateTable() {
String sql = "SELECT * FROM " + ExampleDatabase + " ORDER BY " + ExampleData + " DESC";
try {
// Make Connection With DB
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData rsmetadata = rs.getMetaData();
// Populate JTable
int columns = rsmetadata.getColumnCount();
DefaultTableModel dtm = new DefaultTableModel();
Vector columns_name = new Vector();
Vector data_rows = new Vector();
for (int i = 1; i <= columns; i++) {
columns_name.addElement(rsmetadata.getColumnName(i));
}
dtm.setColumnIdentifiers(columns_name);
while (rs.next()) {
data_rows = new Vector();
for (int j = 1; j <= columns; j++) {
data_rows.addElement(rs.getString(j));
}
dtm.addRow(data_rows);
}
table.setModel(dtm);
// Create Header For JTable
TTHeader tth = new TTHeader(table.getColumnModel());
tth.setToolTipStrings(tooltipsSDB);
table.setTableHeader(tth); // On This Line I Get NullPointerException With Uknown Source
table.repaint();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Populate table error! \n" + e);
}
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new Table();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
});
}
和 TTHeader 类:
String[] toolTips;
public TTHeader(TableColumnModel model) {
super(model);
}
public String getToolTipText(MouseEvent e) {
int col = columnAtPoint(e.getPoint());
int modelCol = getTable().convertColumnIndexToModel(col);
String retStr;
try {
retStr = toolTips[modelCol];
} catch (NullPointerException ex) {
retStr = "";
} catch (ArrayIndexOutOfBoundsException ex) {
retStr = "";
}
if (retStr.length() < 1) {
retStr = super.getToolTipText(e);
}
return retStr;
}
public void setToolTipStrings(String[] toolTips) {
this.toolTips = toolTips;
}
当我从 JComboBox 中选择第二个数据库时,会出现 NPE。在 JComboBox 监听器中,我调用 populateTable() 方法。这是更具体的堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mypackage.TTHeader.getToolTipText(TTHeader.java:19)
at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(Unknown Source)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(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.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)
第 19 行:
int modelCol = getTable().convertColumnIndexToModel(col);
最佳答案
当您获得 NPE 并识别该行时,您首先检查的是取消引用运算符 (.
) 的所有出现。此类运算符左侧 (!) 的值将为 null
。 (如果一行上有多个 .
,则使用其中之一。因此,如果您的行是 foo.getBar().doSomething()
,则 foo
是 null
或 foo.getBar()
返回 null
。但是 doSomething()
返回的是没关系。)
在这种情况下,可能是 getTable()
方法返回 null
。
自 Java 5 以来,出现了两种新的、更隐蔽的可能NPE的原因:
for (Foo foo : fooCollection)
中隐式解除引用,如果 fooCollection
为 null,则会得到一个 NPE。Integer i = null;整数 j = i + 1;//此处为NPE
这就是您通常需要了解的有关 NPE 调试的全部信息,当然还有更一般的建议,即您应该记录变量值或使用调试器逐步执行代码。
关于java - 为什么 setTableHeader() 方法会抛出 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986391/
来自 java docs 公共(public) FileWriter(String fileName) 抛出 IOException 抛出: IOException - 如果指定的文件存在但它是目录而
我使用以下代码将我的 .net 客户端(基于 CQL)连接到 3 节点 Cassandra 集群。我以 30 条记录/秒的速度(从 RabbitMQ)获取数据,并且它们顺利地存储在 cassandra
如果在读取文件时缺少字段,我应该捕获 NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的 try/catch 代码来做到这一点?这是
我正在尝试使用 ASP.NET MVC 实现 OpeinID 登录。我正在尝试按照 http://blog.nerdbank.net/2008/04/add-openid-login-support-
学习使用 Java 进行 xml 解析,并且正在编写一个测试程序来尝试各种东西。所有测试 System.out.println() 都是我在控制台中所期望的,除了 childElement 返回 [n
我正在尝试使用 SwingUtilities 创建 JFrame Thread tt = new Thread(new Runnable() { public void run
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我写了这段代码: MethodInfo method2 = typeof(IntPtr).GetMethod( "op_Explicit", Bind
我开始学习 Java,并且正在根据书本做一些练习。在执行此操作时,我遇到了以下错误:线程“main”java.util.InputMismatchException 中出现异常。我正在编写一个简单的程
我有一个文本文件,其中前两行是整数 m 和 n,然后有 m 行,每行都有 n 管道分隔值。我编写了一个程序,读取文件并使用文件中的值创建 m*n 数组,它工作了无数次,然后突然,使用相同的代码,使用相
所以我尝试使用在另一个类中生成的 bean 以在主应用程序中使用 package com.simon.spring.basics.properties; import org.spri
我还没有完成这个应用程序,但我希望在我的手机上看到它的样子。但是,它会强制关闭并引发 InstantiationException。 logcat 异常: 09-19 20:13:47.987: D/
我想从 UIViewController 加载一个基于 SwiftUI 的 View ,该 View 读取包本地的 json。仅 swiftUI 项目中的代码和绑定(bind)工作正常,当我利用 UI
'java.net.SocketTimeoutException:连接超时' 循环一段时间后我收到此错误。为什么我会收到 SocketTimeoutException?我该如何修复这个错误? @Ove
当有 null 值时抛出 ArgumentNullException() 是个好主意吗? This thread 没有提到在 null 上抛出的最明显的异常。 谢谢 最佳答案 ArgumentNull
我得到这个异常: NullReferenceException Object reference not set to an instance of an object at Namespace
所以其中一个方法的描述如下: public BasicLinkedList addToFront(T data) This operation is invalid for a sorted list
我正在使用 Intellij Idea,当我去生成 JavaDocs(通过工具 -> 生成 JavaDoc)时,我抛出了一个 IllegealArgumentException,没有关于发生了什么问题
我正在学习 C++ 中的互斥锁,但以下代码(摘自 N. Josuttis 的“C++ 标准库”)有问题。 我不明白为什么它会阻塞/抛出除非我在主线程中添加this_thread::sleep_for(
我正在试验 JavaFX 标签和组,通过鼠标拖动将它们移动到屏幕上。新节点从一些线程添加到动画组。但是,有时我会突然看到以下异常 - 我假设,当某些节点重叠时。但是不知道是什么问题……因为不涉及我的代
我是一名优秀的程序员,十分优秀!