我正在写一个小费计算器。您必须选择“服务质量”,这将改变小费百分比。

我已经尝试过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!");})可能是有意义的。请注意,您可能希望以不同于系统输出某些字符串的方式来验证您的值,但这不属于此问题。

希望这能解决您的问题!

09-26 08:00