我正在写一个小费计算器。您必须选择“服务质量”,这将改变小费百分比。
我已经尝试过Jlist.getSelectedValue(),但仍然收到相同的错误:
线程“ AWT-EventQueue-0”中的异常java.lang.NullPointerException
jList1 = new javax.swing.JList<>();
String bill = jTextField1.getText();
double realBill = Double.parseDouble(bill);
String people = jTextField2.getText();
int noOfPeople = Integer.parseInt(people);
String selectQual= jList1.getSelectedValue();
String[] strings = { "PERFECT 20%", "GOOD 15%", "NOT BAD 10%", "BAD 5%", "TRASH 0%" };
int s = 0;
double servQual = 0;
for (int i=0;i<4;i++){
if (selectQual.equals(strings[i])){
s = i;
break;
}
}
switch(s){
case 0: servQual=0.2;
break;
case 1: servQual=0.15;
break;
case 2: servQual=0.1;
break;
case 3: servQual=0.05;
break;
case 4: servQual=0;
break;
}
double finalCheck = (realBill*(1+servQual))/noOfPeople;
DecimalFormat df = new DecimalFormat("#.##");
JOptionPane.showMessageDialog(null,"Each person has to pay "+ df.format(finalCheck));
JOptionPane.showMessageDialog(null,selectQual);
我希望在对话框中获得每人的最终账单。但是,该错误不断出现。
最佳答案
在设置选定值或什至用任何值填充列表之前(至少在您的已发布代码显示之前),您都在调用getSelectedValue()
。
我猜想strings
数组中的值是您要用来填充列表的值。在初始化列表之前,先初始化strings
,然后像这样初始化jList1 = new JList(strings);
。
然后,在选择值之前,初始化字符串selectedQual
。有多种解决方案,具体取决于您的需求。如果希望列表具有默认的选定值(读取:“对话框初始化时已经填充”),请调用jList1.setSelectedValue("the value you want selected")
或jList1.setSelectedIndex("the index of the value you want selected")
。如果您希望它为空白,则保持原样。
现在,无论哪种方式,您都希望仅在表单完成并且用户执行某种操作后才调用getSelectedValue()
(我猜是某种“确认”按钮)。因此,无论执行什么操作,都将关闭窗体并处理值,这就是您调用getSelectedValue()
的地方,因为此时必须已设置它。
如果在初始化时选择空白字段,则在其中包含某种空检查(例如java if(getSelectedValue() != null) {String selectedQual = jList1.getSelectedValue();} else {System.out.println("Error: No Tip percentage has been selected!");}
)可能是有意义的。请注意,您可能希望以不同于系统输出某些字符串的方式来验证您的值,但这不属于此问题。
希望这能解决您的问题!