- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一个java swing应用程序,用于搜索一些数据(通过JDBC从分层数据库中提取)。为了测试目的,我做了这样的:-
1 级:1、2、32 级:{1.1, 1.2, 1.3}, {2.1, 2.2, 2.3}, {3.1, 3.2, 3.3}3 级:{1.1.1, 1.1.2},{1.2.1, 1.2.2}, ..., {3.3.1, 3.3.2}
用户界面是这样的:-Level-1 将显示在 JComboBox 中。Level-2 也是一个 JComboBox,但通过 ComboBoxModel 进行填充取决于 level-1 selectedIndex。Level-3 我想在依赖于 level-1 和 level-2 的 JList 中显示,如 level-3 中那样。
level-1 和 level-2 工作正常。但是当我尝试启动 level3values 属性时,level-3 给出了“NullPointerException”。
这是代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
public class TestSwing extends JPanel implements Runnable, ActionListener {
private JComboBox combo1;
private JComboBox combo2 = new JComboBox();
private ComboBoxModel[] models ;
private JList<String> list;
private DefaultListModel<String>[][] level3values;
//TODO:add displaying level3, copy method
public TestSwing(String[] level1candidates, String[][] level2candidates, String[][][] level3candidates){
this.models = new ComboBoxModel[level1candidates.length];
this.combo1 = new JComboBox(level1candidates);
for (int i=0; i<level1candidates.length; i++ )
models[i] = new DefaultComboBoxModel(level2candidates[i]);
for (int i=0; i<level1candidates.length; i++) {
for (int j=0; j<level2candidates[i].length; j++) {
level3values[i][j] = new DefaultListModel<String>();
for (int k=0; k<level3candidates[i][j].length; k++) {
this.level3values[i][j].addElement(level3candidates[i][j][k]);
} ;//TODO:DEBUG-how to initiate list model
}
}
combo2.setModel(models[0]);
this.list = new JList<String>(new String[]{});
this.add(combo1);
this.add(combo2);
this.add(list);
this.combo1.addActionListener(this);
this.combo2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
int i = combo1.getSelectedIndex();
combo2.setModel(models[i]);
int j = combo2.getSelectedIndex();
list.setModel(level3values[i][j]);
}
@Override
public void run() {
JFrame f = new JFrame("CPBG-Store_Material-Finder");
f.setSize(400,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel controlPane = new JPanel();
GridLayout gridLayout = new GridLayout(3,2, 10, 10);
controlPane.setLayout(gridLayout);
controlPane.add(new JLabel("Level-1"));
controlPane.add(this.combo1);
controlPane.add(new JLabel("Level-2"));
controlPane.add(this.combo2);
controlPane.add(new JLabel("Level-3"));
//controlPane.add(new JLabel("Level-4"));
controlPane.add(this.list);
f.add(controlPane);
//f.pack();
//f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
String[] level1candidates = new String[]{"1", "2", "3"};
String[][] level2candidates = {new String[]{"1.1", "1.2", "1.3"},
new String[]{"2.1", "2.2", "2.3"}, new String[]{"3.1", "3.2", "3.3"}};
String[][][] level3candidates = {
{new String[]{"1.1.1", "1.1.2"},new String[]{"1.2.1", "1.2.2"}, new String[]{"1.3.1","1.3.2"}},
{new String[]{"2.1.1", "2.1.2"},new String[]{"2.2.1", "2.2.2"}, new String[]{"2.3.1","2.3.2"}},
{new String[]{"3.1.1", "3.1.2"},new String[]{"3.2.1", "3.2.2"}, new String[]{"3.3.1","3.3.2"}},
};
//creating and showing this application's GUI.
EventQueue.invokeLater(new TestSwing(level1candidates, level2candidates, level3candidates));
}
}
预先感谢您帮助调试问题。
特别是,comboboxmodel[] 工作正常,但 defaultlistmodel[][] 给出空指针异常,有什么特殊原因吗?
这是两个级别的工作代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
public class MaterialFinder extends JPanel implements Runnable, ActionListener {
private JComboBox combo1;
private JComboBox combo2 = new JComboBox();
private ComboBoxModel[] models ;
public MaterialFinder(String[] level1candidates, String[][] level2candidates, String[][][] level3candidates){
this.models = new ComboBoxModel[level1candidates.length];
this.combo1 = new JComboBox(level1candidates);
for (int i=0; i<level1candidates.length; i++ )
models[i] = new DefaultComboBoxModel(level2candidates[i]);
combo2.setModel(models[0]);
this.add(combo1);
this.add(combo2);
this.combo1.addActionListener(this);
this.combo2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
int i = combo1.getSelectedIndex();
combo2.setModel(models[i]);
int j = combo2.getSelectedIndex();
}
@Override
public void run() {
JFrame f = new JFrame("CPBG-Store_Material-Finder");
f.setSize(400,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
//f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
JDBCUtilities jdbcUtilities = new JDBCUtilities();
jdbcUtilities.dbName = "cpbg";
jdbcUtilities.userName = "root";
jdbcUtilities.password = "root";
jdbcUtilities.serverName = "localhost";
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver Loaded");
connection = jdbcUtilities.getConnection();
//TODO:copy SQL code here
} catch (SQLException se) {
jdbcUtilities.printSQLException(se);
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
jdbcUtilities.closeConnection(connection);
}
//TODO:remove the following dummyLevelCandidate
String[] level1candidates = new String[]{"1", "2", "3"};
String[][] level2candidates = {new String[]{"1.1", "1.2", "1.3"},
new String[]{"2.1", "2.2", "2.3"}, new String[]{"3.1", "3.2", "3.3"}};
String[][][] level3candidates = {
{new String[]{"1.1.1", "1.1.2"},new String[]{"1.2.1", "1.2.2"}, new String[]{"1.3.1","1.3.2"}},
{new String[]{"2.1.1", "2.1.2"},new String[]{"2.2.1", "2.2.2"}, new String[]{"2.3.1","2.3.2"}},
{new String[]{"3.1.1", "3.1.2"},new String[]{"3.2.1", "3.2.2"}, new String[]{"3.3.1","3.3.2"}},
};
//creating and showing this application's GUI.
EventQueue.invokeLater(new MaterialFinder(level1candidates, level2candidates, level3candidates));
}
}
最佳答案
问题出在这一行:
level3values[i][j] = new DefaultListModel<String>();
因为level3values
是null
。因此,您应该使用正确的尺寸来正确初始化它,就像您的数据一样。因此,在用于初始化模型的嵌套 for 循环之前,您应该初始化它:
this.level3values = new DefaultListModel[level2candidates.length][level2candidates.length];
** level2candidates.length
只是一个示例,展示了如何解决问题。
关于Java Swing 应用程序 JList null 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964221/
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
这个问题在这里已经有了答案: Can we subtract NULL pointers? (4 个回答) 关闭 2 个月前。 是否定义了NULL - NULL? (char *)NULL - (ch
是否有推荐的方法(根据 .net Framework 指南)检查 null,例如: if (value == null) {//code1} else {//code2} 或 if (value !=
我正在尝试将值插入数据库,但出现这样的错误任何人都可以告诉我为什么该值为空,如下所示: An exception occurred while executing 'INSERT INTO perso
这个问题在这里已经有了答案: String concatenation with a null seems to nullify the entire string - is that desire
您好,我正在 Android 联系人搜索模块中工作。我正在查询下方运行。 cur = context.getContentResolver().query(ContactsContract.Data.
下面的 SQL 表定义说明了从我的 MYSQL 数据库创建表的语句之一,该数据库是由我公司的前开发人员开发的。 DROP TABLE IF EXISTS `classifieds`.`category
我主要有应用程序开发背景。在编程语言中 variable == null或 variable != null有效。 当涉及到 SQL 时,以下查询不会给出任何语法错误,但也不会返回正确的结果。 sel
我在尝试检查某些元素是否为 NULL 时遇到段错误或不。任何人都可以帮忙吗? void addEdge(int i, int j) { if (i >= 0 && j > 0)
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
下面查询的关系代数表达式是什么?我找不到“Is Null”的表达式。 SELECT reader.name FROM reader LEFT JOIN book_borrow ON reader.ca
我正在尝试使用三元运算符来检查值是否为 null 并返回一个表达式或另一个。将此合并到 LINQ 表达式时,我遇到的是 LINQ 表达式的 Transact-SQL 转换试图执行“column = n
我在给定的代码中看到了以下行: select(0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, &timeout); http://linux
var re = /null/g; re.test('null null'); //> true re.test('null null'); //> true re.test('null null')
这个问题在这里已经有了答案: 关闭 13 年前。 我今天避开了一场关于数据库中空值的激烈辩论。 我的观点是 null 是未指定值的极好指示符。团队中有意见的其他每个人都认为零和空字符串是可行的方法。
由于此错误,我无法在模拟器中运行我的应用: Error:null value in entry: streamOutputFolder=null 或 gradle - Error:null value
我正在尝试在 Android 应用程序中创建电影数据库,但它返回错误。知道这意味着什么吗? public Cursor returnData() { return db.query(TABLE
我一直在检查浏览器中的日期函数以及运行时间 new Date (null, null, null); 在开发工具控制台中,它给出了有效的日期 Chrome v 61 回归 Sun Dec 31 189
为什么 NA==NULL 会导致 logical (0) 而不是 FALSE? 为什么 NULL==NULL 会导致 logical(0) 而不是 TRUE? 最佳答案 NULL 是一个“零长度”对象
我是一名优秀的程序员,十分优秀!