当引入swing.JOptionPane和 text.DecimalFormat后,程序正确,能编译但不能得到答案,而是
Exception in thread "main" java.lang.NullPointerException
at com.water1.Test.main(Test.java:25) 然后检查,发现找不到源,但在其他电脑上能编译得到正确答案,请问是配置没弄好,还是什么原因?怎么才能弄好!谢谢

解决方案 »

  1.   

       代码:
    package com.employee;public abstract class Employee {
      private String firstName;
      private String lastName;
      
      public Employee(String first,String last) {
      
      firstName=first;
      lastName=last;
      }/**
     * @return firstName
     */
    public String getFirstName() {
    return firstName;
    }/**
     * @return lastName
     */
    public String getLastName() {
    return lastName;
    }public String toString() {
    return firstName+' '+lastName;
    }public abstract double earings();


    }
    package com.employee;public  final class Boss extends Employee { private double weeklySalary;

    public Boss(String first,String last,double s) {
    super(first,last);
    setWeeklySalary(s);
    }
    public double earings() {

    return weeklySalary;
    }
    /**
     * @param weeklySalary 要设置的 weeklySalary
     */
    public void setWeeklySalary(double s) {
    weeklySalary=(s>0?s:0);
    }

    public String toString() {
    return "经理:"+super.toString();
    }}
    package com.employee;import com.sun.java_cup.internal.internal_error;public final class CommissionWorker extends Employee { private double salary;
    private double commission;
    private int quantity;

    public CommissionWorker(String first,String last,double s,double c,int q) {
    super(first, last);
    setSalary(s);
    setCommission(c);
    setQuantity(q);

    }


    @Override
    public double earings() {
    // TODO 自动生成方法存根
    return salary+commission*quantity;
    }
    /**
     * @param commission 要设置的 commission
     */
    public void setCommission(double commission) {
    this.commission = commission;
    }
    /**
     * @param quantity 要设置的 quantity
     */
    public void setQuantity(int quantity) {
    this.quantity = quantity;
    }
    /**
     * @param salary 要设置的 salary
     */
    public void setSalary(double salary) {
    this.salary = salary;
    }
       
    public String toString() {
    return "普通员工:"+super.toString();
    }
    }
    package com.employee;public final class HourlyWorker extends Employee {
      
     private double wage;
     private double hours;

     public HourlyWorker(String first,String last,double w,double h) {
     super(first, last);
     setHours(h);
     setWage(w);
     }
     
    public void setWage(double wage) {
    this.wage=wage;
    }
    /**
     * @param hours 要设置的 hours
     */
    public void setHours(double hours) {
    this.hours = hours;
    } @Override
    public double earings() {

    return  wage*hours;
    }

    public String toString() {
    return "计时工人:"+super.toString();
    }
    }
    package com.employee;public final class PieceWorker extends Employee {   private double wagePerPiece;
      private int quantity;
      
      public PieceWorker(String first,String last,double w,int q) {
      super(first, last);
      setQuantity(q);
      setWagePerPiece(w);
      } /**
     * @param quantity 要设置的 quantity
     */
    public void setQuantity(int quantity) {
    this.quantity = quantity;
    } /**
     * @param wagePerPiece 要设置的 wagePerPiece
     */
    public void setWagePerPiece(double wagePerPiece) {
    this.wagePerPiece = wagePerPiece;
    } @Override
    public double earings() {
    // TODO 自动生成方法存根
    return  quantity*wagePerPiece;
    }

    public String toString() {
    return "计件工人"+super.toString();
    }

    }
    package com.employee;import java.text.DecimalFormat;import javax.swing.JOptionPane;public class Test { /**
     * @param args
     */
    public static void main(String[] args) {

     Employee ref;
     String output="";
     
     Boss boss=new Boss("是","计划",800.00);
     CommissionWorker c=new CommissionWorker("w","f",400.0,4.0,130);
     PieceWorker p=new PieceWorker("bao","li",2.7,200);
             HourlyWorker h=new HourlyWorker("ke","peng",13.75,40);
             
             DecimalFormat pre=new DecimalFormat("0.00");
             
             ref=boss;                
             output+=ref.toString()+"afsd"+pre.format(ref.earings())+"\n"+boss.toString()+
                         "asdf"+pre.format(boss.earings())+"\n";
             
             ref=c;                
             output+=ref.toString()+"afsd"+pre.format(ref.earings())+"\n"+c.toString()+
                         "asdf"+pre.format(c.earings())+"\n";
     
             ref=p;                
             output+=ref.toString()+"afsd"+pre.format(ref.earings())+"\n"+p.toString()+
                         "asdf"+pre.format(p.earings())+"\n";
     
             ref=h;                
             output+=ref.toString()+"afsd"+pre.format(ref.earings())+"\n"+h.toString()+
                         "asdf"+pre.format(h.earings())+"\n";
     
             JOptionPane.showMessageDialog(null,output, "demo",JOptionPane.INFORMATION_MESSAGE);
             
             System.exit(0);
     
    }}