I get a stack dump when my program hits this error. Please help

I am trying to trip a flag for when the Monthly Payment Amount is not valid. I noticed the payment screen field displays a square symbol when it hits this error. You can dupe the error by doing the following.
1. Select the EnterInformation Manually radio button.
2. Enter a valid range number say 25000
3. Click the Calculate button without entering any other data. You will get my code checked error and notice a square in the Monthly Payment Amount field.
4. Now click the report button and you will get the stack dump. I have put some debg here comments where I want the code to trip the flag is Payment Amount is 0. I believe it is because the value is null but I am not sure.

I have a deadline of Tuesday 8:00 PM for my fix.
Thanks for any help....


//  Gather required packages for program
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;

//  Begin MortgageCalcMRP class
public class MortgageCalcMRP extends JPanel
    {
        public int arraynum=0;                                              //  Set array to 0 for Rate/Terms selection
        public  boolean paymentZeroFlag = true;             //   Flag for zero amount in screen field for monthly payment amount
        public  boolean loanAmountFieldFlag = false;     //  Used as trip flag for error detected in Loan Amount Field
        public  boolean interestRateFieldFlag = false;    //  Used as trip flag for error detected in Interest Rate Field
        public  boolean yearsTermFieldFlag = false;       //  Used as trip flag for error detected in Years Term Field
        // Button and Radio Button defintions.
        public JButton resetButton;
        public JButton calculateButton;
        public JButton quitButton;
        public JButton reportButton;
        public  JRadioButton rate1Button = new JRadioButton("Rate 1 - 7 years at 5.35%   (84 - Payments)");
        public  JRadioButton rate2Button = new JRadioButton("Rate 2 - 15 years at 5.50%  (180 - Payments)");
        public  JRadioButton rate3Button = new JRadioButton("Rate 3 - 30 years at 5.75%  (360 - Payments)");
        public  JRadioButton rate4Button = new JRadioButton("Enter Information Manually");
        //  Labels for the input fields.
        public JLabel amountLabel = new JLabel("Loan Amount  >= 10000.00  <= 200000.00: ",JLabel.RIGHT);
        public JLabel rateLabel = new JLabel("Interest Rate  >= 1  <= 30: " ,JLabel.RIGHT );
        public JLabel yearsTermLabel = new JLabel("Years of Term  >= 1  <= 40: ",JLabel.RIGHT);
        public JLabel paymentLabel = new JLabel("Monthly Payment: ",JLabel.RIGHT);
        public JLabel errorLine1Label = new JLabel(" ",JLabel.CENTER);
        public JLabel errorLine2Label = new JLabel(" ",JLabel.CENTER);
        public JLabel errorLine3Label = new JLabel(" ",JLabel.CENTER);
        public JLabel errorLine4Label = new JLabel("  ",JLabel.CENTER);
        //  Text fields for data entry
        public JTextField loanAmountField;
        public JTextField interestRateField;
        public JTextField yearsTermField;
        public JTextField paymentField;
        public JTextArea dataReportArea;
        //  Formats for entered data.
        public DecimalFormat decimalFormat =      (DecimalFormat) NumberFormat.getNumberInstance();
        public NumberFormat currencyFormat =       (NumberFormat) NumberFormat.getNumberInstance();
        public NumberFormat percentFormat = NumberFormat.getNumberInstance();
        public DecimalFormat paymentFormat =            (DecimalFormat) NumberFormat.getNumberInstance();
        public DataVerifier verifier = new DataVerifier();
        // Execute the constructor.
        public MortgageCalcMRP()
           {
               super(new BorderLayout());
               // Formatting for display purposes of payment data.
               percentFormat.setMinimumFractionDigits(3);
               decimalFormat.setParseIntegerOnly(true);
               paymentFormat.setMaximumFractionDigits(2);
               paymentFormat.setNegativePrefix("(");
               paymentFormat.setNegativeSuffix(")");
               double payment = 0.00;
              //Create the text fields and set them up.
               loanAmountField = new JTextField(currencyFormat.format(0.00), 10);
               loanAmountField.setInputVerifier(verifier);
               loanAmountField.setBackground(Color.yellow);
               interestRateField = new JTextField(percentFormat.format(0.00), 10);
               interestRateField.setInputVerifier(verifier);
               interestRateField.setEditable(false);
               yearsTermField = new JTextField(decimalFormat.format(0), 10);
               yearsTermField.setInputVerifier(verifier);
               yearsTermField.setEditable(false);
               paymentField = new JTextField(paymentFormat.format(0.00), 10);
               paymentField.setInputVerifier(verifier);
               paymentField.setEditable(false);
               //  Create text area to output data report and allow scroll bars to be used
               errorLine1Label.setForeground(Color.red);  //  Set text color red for error highlites
               errorLine2Label.setForeground(Color.red);
               errorLine3Label.setForeground(Color.red);
               errorLine4Label.setForeground(Color.red);
               dataReportArea = new JTextArea(5, 60);      //  Set data Report Area size
               dataReportArea.setEditable(false);
               dataReportArea.setForeground(Color.gray);
               dataReportArea.setFont(new Font("Fixedsys", Font.BOLD,12));
               JScrollPane scrollPane = new JScrollPane(dataReportArea,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
               // Create radio buttons for rate selections and set listeners
               rate1Button.setSelected(false);
               rate1Button.addItemListener(new SelectItemListener());
               rate2Button.addItemListener(new SelectItemListener());
               rate3Button.addItemListener(new SelectItemListener());
               rate4Button.addItemListener(new SelectItemListener());
               rate1Button.setBackground(Color.green);
               rate2Button.setBackground(Color.green);
               rate3Button.setBackground(Color.green);
               rate4Button.setBackground(Color.white);
               //  Group the radio buttons for one selection.
               ButtonGroup groupRate = new ButtonGroup();
               groupRate.add(rate1Button);
               groupRate.add(rate2Button);
               groupRate.add(rate3Button);
               groupRate.add(rate4Button);
               // Set the button text for major button functions.
               resetButton = new JButton("Reset Data Fields");
               resetButton.setBackground(Color.blue);
               resetButton.setForeground(Color.white);
               calculateButton = new JButton("Calculate Mortgage");
               calculateButton.setBackground(Color.red);
               calculateButton.setForeground(Color.white);
               quitButton = new JButton("Quit Program");
               quitButton.setBackground(Color.black);
               quitButton.setForeground(Color.white);
               reportButton = new JButton("Create Report");
               reportButton.setBackground(Color.white);
               reportButton.setForeground(Color.red);
               //  Register an action listener.
               loanAmountField.addActionListener(verifier);
               interestRateField.addActionListener(verifier);
               yearsTermField.addActionListener(verifier);
               resetButton.addActionListener(verifier);
               calculateButton.addActionListener(verifier);
               quitButton.addActionListener(verifier);
               reportButton.addActionListener(verifier);
               //  Set the label values.
               amountLabel.setLabelFor(loanAmountField);
               rateLabel.setLabelFor(interestRateField);
               yearsTermLabel.setLabelFor(yearsTermField);
               paymentLabel.setLabelFor(paymentField);
               //  Lay out the labels in a panel.
               Border raisedetched;
               raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
               JPanel labelPane = new JPanel(new GridLayout(0,1));
               labelPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               labelPane.add(amountLabel);
               labelPane.add(rateLabel);
               labelPane.add(yearsTermLabel);
               labelPane.add(paymentLabel);
               labelPane.add(errorLine1Label);
               labelPane.add(errorLine2Label);
               labelPane.add(errorLine3Label);
               labelPane.add(errorLine4Label);
               //  Layout the text fields in a panel.
              JPanel fieldPane = new JPanel(new GridLayout(0,1));
               fieldPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               fieldPane.add(loanAmountField);
               fieldPane.add(interestRateField);
               fieldPane.add(yearsTermField);
               fieldPane.add(paymentField);
               fieldPane.add(calculateButton);
               fieldPane.add(resetButton);
               fieldPane.add(reportButton);
               fieldPane.add(quitButton);
               //  Create etched borders for panels
              JPanel textPane = new JPanel(new GridLayout(0, 1));
               textPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               textPane.add(scrollPane);
               //  Create radio button for 3 preset loan rates/terms and add border
              JPanel radioPane  = new JPanel(new GridLayout(0, 1));
               radioPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               radioPane.add(rate1Button);
               radioPane.add(rate2Button);
               radioPane.add(rate3Button);
               radioPane.add(rate4Button);
               //  Put the labels on left, entry fields on right.
               setBorder(BorderFactory.createEmptyBorder(10,40,40, 40));     //    (TOP, LEFT, BOTTOM, RIGHT)
               add(labelPane, BorderLayout.CENTER);
               add(fieldPane, BorderLayout.LINE_END);
               add(textPane, BorderLayout.SOUTH);
               add(radioPane, BorderLayout.WEST);
            }  //  End MortgageCalcMRP method block
        //  This class will test for the performed actions, and execute the
        //  method for calculating the payment.
        class DataVerifier extends InputVerifier implements ActionListener
            {
                 public void actionPerformed(ActionEvent e)
                     {
                         Object selected = e.getSource();
                         //  Clear the fields from user data and report area.
                         if (selected == resetButton)
                             {
                                 loanAmountField.setText(paymentFormat.format(0.00));
                                 paymentField.setText(paymentFormat.format(0.00));
                                 dataReportArea.setText("  \n");     //  Erase Data Area of any report data displayed
                                 errorLine1Label.setText(" ");        //  Erase error lines on screen for any errors displayed
                                 errorLine2Label.setText(" ");
                                 errorLine3Label.setText(" ");
                                 errorLine4Label.setText(" ");
                                 paymentZeroFlag = true;
                                 interestRateFieldFlag = true;          //  Reset trip flag if InterestRateField had an error
                                 loanAmountFieldFlag = true;           //  Reset trip flag if loanAmountField had an error
                                 yearsTermFieldFlag = true;             //  Reset trip flag if yearsTermField had an error
                             }
                          // Calculate mortgage payment.
                          if (selected == calculateButton)
                             {
                                 try
                                       {
                                            //  Check Loan Amount field for error parameters
                                            if (Double.parseDouble(loanAmountField.getText().trim()) < 10000 ||  Double.parseDouble(loanAmountField.getText().trim()) > 200000)
                                                {
                                                     errorLine1Label.setText("Invalid Data Range - Loan Field");
                                                     errorLine2Label.setText("Input ranges  >= 10000.00  <= 200000.00");
                                                     errorLine3Label.setText("Please input data value again");
                                                     errorLine4Label.setText("or see user manual for help");
                                                     loanAmountField.setText(paymentFormat.format(0.00));    //  Reset field to 0
                                                     dataReportArea.setText("  \n");     //   If error erase data report area
                                                     loanAmountFieldFlag = false;         //   Trip flag that Loan Amount field had error
                                               }
                                           else
                                               {
                                                    errorLine1Label.setText(" ");         //   Erase any error lines if data is within limits
                                                    errorLine2Label.setText(" ");
                                                    errorLine3Label.setText(" ");
                                                    errorLine4Label.setText(" ");
                                                    loanAmountFieldFlag = true;           //  Reset flag if data is within limits
                                               }
                                            //  Check Interest Rate Field for error parameters
                                            if (loanAmountFieldFlag == true)    //  Check that Loan Amount field does not have any errors before continuing to check Interest Rate field
                                               {
                                                    if (Double.parseDouble(interestRateField.getText().trim()) < 1 ||  Double.parseDouble(interestRateField.getText().trim()) > 30)
                                                       {
                                                           errorLine1Label.setText("Invalid Data Range - Interest Rate");
                                                           errorLine2Label.setText("Input ranges  >= 1.0  <= 30.0");
                                                           errorLine3Label.setText("Please input data value again");
                                                           errorLine4Label.setText("or see user manual for help");
                                                           interestRateField.setText(paymentFormat.format(0.00));     //  Reset field to 0
                                                           dataReportArea.setText("  \n");     //   If error erase data report area
                                                           interestRateFieldFlag = false;         //  Trip flag that Interest Rate field had error
                                                       }
                                                    else
                                                       {
                                                           errorLine1Label.setText(" ");        //   Erase any error lines if data is within limits
                                                           errorLine2Label.setText(" ");
                                                           errorLine3Label.setText(" ");
                                                           errorLine4Label.setText(" ");
                                                           interestRateFieldFlag = true;          //   Reset flag if data is within limits
                                                       }
                                               }
                                            //  Check Years Term field for error parameters
                                            if (interestRateFieldFlag == true)    //  Check that Interest Rate field does not have any errors before continuing to check Years Term field
                                              {
                                                  if (Integer.parseInt(yearsTermField.getText().trim()) < 1 ||  Integer.parseInt(yearsTermField.getText().trim()) > 40)
                                                       {
                                                           errorLine1Label.setText("Invalid Data Range - Year of Term");
                                                           errorLine2Label.setText("Input ranges  >= 1  <= 40");
                                                           errorLine3Label.setText("Please input data value again");
                                                           errorLine4Label.setText("or see user manual for help");
                                                           yearsTermField.setText(paymentFormat.format(0.00));     //  Reset field to 0
                                                           dataReportArea.setText("  \n");
                                                           yearsTermFieldFlag = false;          //  Trip flag that Years Term field had error
                                                       }
                                                  else
                                                       {
                                                           errorLine1Label.setText(" ");      //  Erase any error lines if data is within limits
                                                           errorLine2Label.setText(" ");
                                                           errorLine3Label.setText(" ");
                                                           errorLine4Label.setText(" ");
                                                           yearsTermFieldFlag = true;         //   Reset flag if data is within limits
                                                       }
                                              }
                                       }  //  End try block
                                  //  Catch errors and display for user
                                 catch (NumberFormatException m)
                                       {
                                           System.out.println("Number format error: " + m.getMessage());  // Debugging purposes to show output in DOS
                                           errorLine1Label.setText("Invalid field entry detected ");
                                           errorLine2Label.setText("GENERAL  ERROR  MESSAGE RETURNED");
                                           errorLine3Label.setText(" "+m.getMessage());
                                           errorLine4Label.setText("Refer to user manual for solution");
                                      }  //  End catch block
                                 getPayment();
                             }  //  End calculate block
                     //  Quit Program
                     if (selected == quitButton)
                        {
                             System.exit(0);
                         }  //  End quit button block
                                                   // Create Report for screen output
                     if (selected == reportButton)
                         {
//  start debug here
   if (Double.parseDouble( paymentField.getText().trim()) <=  0.0)
       { paymentZeroFlag = true;}
   else
       { paymentZeroFlag = false;}
   System.out.println(paymentField.getText());
//  end debug here
                            if (paymentZeroFlag == false)
                               {
                                   errorLine1Label.setText(" ");      //  Erase any error lines if data is within limits
                                   errorLine2Label.setText(" ");
                                   errorLine3Label.setText(" ");
                                   errorLine4Label.setText(" ");
                                   NumberFormat formatMonthNum = new DecimalFormat("   000");               //   Column formatter for payment number
                                   NumberFormat formatpercent = new DecimalFormat(".00");                                   //   Percent Rate formatter for payment number
                                   String formatStartBalance, formatInterest, formatPrincipal, formatEndBalance, formatPayment;      // Format display for column data
                                   dataReportArea.setText("Payment            Month              Start Balance           Interest             Principal           End Balance \n");
                                   double principal =  Double.parseDouble( loanAmountField.getText().trim());                           //  Principal to finance
                                   double ratePercentManual = Double.parseDouble(interestRateField.getText().trim());        //  Get array value for manual entry
                                   double ratePercent[] = { 5.35f, 5.50f, 5.75f, ratePercentManual };                                                  //   rate of loan
                                   double rate[] =             {       ratePercent[0]/100.00,                         ratePercent[1]/100.00,       ratePercent[2]/100.00,  ratePercent[3]/100.00       };      // rate in decimal format percentage
                                   int yearsLoanManual = Integer.parseInt(yearsTermField.getText().trim());         //   Get array value for manual entry
                                   int yearsLoan[] =   {  7,  15, 30, (yearsLoanManual) };                                                      //   Number of years for loan
                                   int paymentsPerYear = 12;                                                                                                               //   Set 12 month per year constant
                                   int numPayments[] = { paymentsPerYear * yearsLoan[0],  paymentsPerYear * yearsLoan[1],  paymentsPerYear * yearsLoan[2],  paymentsPerYear * yearsLoan[3]  };      // number of payments for loan
                                  double effectiveAnnualRate[] =      { rate[0] / paymentsPerYear,       rate[1] / paymentsPerYear, rate[2] / paymentsPerYear, rate[3] / paymentsPerYear            };      // variable percentage rate of loan
                                  double payment[] =      { principal*(effectiveAnnualRate[0] / (1 - Math.pow(1 + effectiveAnnualRate[0], -numPayments[0]))),
                                                                          principal*(effectiveAnnualRate[1] / (1 - Math.pow(1 + effectiveAnnualRate[1], -numPayments[1]))),
                                                                          principal*(effectiveAnnualRate[2] / (1 - Math.pow(1 + effectiveAnnualRate[2], -numPayments[2]))),
                                                                          principal*(effectiveAnnualRate[3] / (1 - Math.pow(1 + effectiveAnnualRate[3], -numPayments[3])))
                                                                       };                                                                                //  calculates montly payment
                                  int counter = 1;                                                                                                                               //   loop counter
                                  int payNumber = 0;                                                                                                                   //   payment increment counter
                                  double startBalance      = principal;                                                                           //   starting balance for display output
                                  double endBalance = 0.0;                                                                                                  //   ending balance for display output
                                  double paidInterest = 0.0;                                                                                                  //   paid interest for display output
                                  double paidPrincipal = 0.0;                                                                                                //   paid interest for display output
                                  int startYear = 2004;                                                                                                           //   year to start payments
                                  int payYear = startYear;                                                                                                //   year counter for output column display
                                  int startMonth = 10;                                                                                                                  //   month to start first payment
                                  int payMonth = startMonth;                                                                                     //  actual pay month for each payment
                                  String  month = "   ";                                                                                                                //  string format for month payment
                                  formatPayment = formatColumn(payment[arraynum]);
                                  while (payNumber < numPayments[arraynum])                                    //   Start main loop and exit if (q) or (Q) keys selected or last payment displayed
                                     {
                                         payNumber++;                                                                                                                                                                //   Payment number in table
                                         month = formatMonthDate(payMonth)+payYear;                                           //   Format month payment display
                                         if (payMonth == 12) {payYear++; payMonth=0;}                                                   //   If payment month is Dec start next payment in month of Jan
                                         paidInterest = ((startBalance*rate[arraynum])/12);                             //   Interest paid on principal balance
                                         paidPrincipal  = (payment[arraynum]-paidInterest);                                      //   Principal paid on loan
                                         endBalance  = (startBalance-paidPrincipal);                                                             //   End balance after intrerest & principal applied toward balance
                                         formatStartBalance = formatColumn(startBalance);                                    //   Format data for even columns
                                         formatInterest = formatColumn(paidInterest);
                                         formatPrincipal = formatColumn(paidPrincipal);
                                         formatEndBalance = formatColumn(endBalance);
                                         //  Print a line of data from table
                                         dataReportArea.append(formatMonthNum.format(payNumber)+"\t"+(month)+"\t"+formatStartBalance+"\t"+formatInterest+"\t"+formatPrincipal+"\t"+formatEndBalance+"\n\n");
                                         payMonth++;
                                         if (endBalance > 0.0)                                                      // If not last payment set start balance to previous ending balance
                                             startBalance = endBalance;
                                     }
                               }
                           else
                               {
                                   errorLine1Label.setText("Invalid Calculation for Monthly Payment");
                                   errorLine2Label.setText("Please ensure that all fields");
                                   errorLine3Label.setText("have valid data input within ranges");
                                   errorLine4Label.setText("and Calcuation button has beed clicked");
                                                                                                                                                                                     }  //  End paymentFlagZero check block
                         }  //  End Report Output
                  }   //  End actionPerformed block
                  //  Verify that the input data is valid, then calculate the mortgage.
              protected void getPayment()
                            {
                     // initialize values to 0
                     double amount = 0.00;
                     double rate = 0.00;
                     int numPeriods = 0;
                     double payment = 0.0;
                     // Parse the input values.  If an exception occurs, set the fields default value of 0.
                     try
                        { amount = currencyFormat.parse(loanAmountField.getText()).doubleValue(); }
                     catch (Exception e)
                         {       loanAmountField.setText(paymentFormat.format(0.00)); }
                     try
                         { rate = percentFormat.parse(interestRateField.getText()).doubleValue(); }
                     catch (Exception e)
                         {       interestRateField.setText(paymentFormat.format(0.00));      }
                     try
                          { numPeriods =      decimalFormat.parse(yearsTermField.getText()).intValue(); }
                     catch (Exception e)
                          { yearsTermField.setText(paymentFormat.format(0.00)); }
                     // Calculate the mortgage  and update the monthly payment.
                     payment = calculatePayment(amount, rate, numPeriods);
                     //  Used to set flag for display report data. If valid data flag is false else flag is true
                     if (payment >= 0.000000001)
                        {paymentZeroFlag = false;}
                     else
                        {paymentZeroFlag = true;}
                     paymentField.setText(paymentFormat.format(payment));
                  }
              //  Check the input.
              public boolean verify(JComponent input)
                  {
                      return true;
                   }
             }  //   End class DataVerifier block
          //  Used to create report column formatted data
          //  Adds proper amount of spaces for proper alignment
          public static String formatColumn(double floatNumber)
              {
                   DecimalFormat numberFormat = new DecimalFormat("$#,##0.00");
                   String stringOfNum = numberFormat.format(floatNumber);
                   int numLen = stringOfNum.length();
                   if (numLen < 13) stringOfNum = "            ".substring(numLen) + stringOfNum;
                   return (stringOfNum);
              }
          //  Used to format the month data for report
          public static String formatMonthDate(int payMonth)
               {
                    String month = "   ";
                    switch (payMonth)
                        {
                             case 1:  month = "01 JAN "; break;
                             case 2:  month = "01 FEB "; break;
                             case 3:  month = "01 MAR "; break;
                             case 4:  month = "01 APR "; break;
                             case 5:  month = "01 MAY "; break;
                             case 6:  month = "01 JUN "; break;
                             case 7:  month = "01 JUL "; break;
                             case 8:  month = "01 AUG "; break;
                             case 9:  month = "01 SEP "; break;
                             case 10: month = "01 OCT "; break;
                             case 11:      month = "01 NOV "; break;
                             case 12: month = "01 DEC "; break;
                             default: month = "   ";
                        }
                   return (month);
               }
        // Routine for Radio Button selection and action
        class  SelectItemListener implements ItemListener
              {
                  public void itemStateChanged(ItemEvent e)
                      {
                          // Get object
                          AbstractButton sel = (AbstractButton)e.getItemSelectable();
                          // Checkbox select or not
                          if(e.getStateChange() == ItemEvent.SELECTED)
                             {
                                 if (sel.getText().equals("Rate 1 - 7 years at 5.35%   (84 - Payments)"))
                                    {
                                        paymentZeroFlag = true;
                                        System.out.println("7 year loan at 5.35% selected");           // Debug purposes only
                                        arraynum = 0;  //  Selection rate1RadioButton used for array number 1
                                        yearsTermField.setText("7");
                                        interestRateField.setText("5.35");
                                        paymentField.setText("0.00");
                                        dataReportArea.setText("  \n");
                                        interestRateField.setEditable(false);
                                        yearsTermField.setEditable(false);
                                    }
                                 else if (sel.getText().equals("Rate 2 - 15 years at 5.50%  (180 - Payments)"))
                                    {
                                        paymentZeroFlag = true;
                                        System.out.println("15 year loan at 5.50% selected");         // Debug purposes only
                                        arraynum = 1;  //  Selection rate2RadioButton used for array number 2
                                        yearsTermField.setText("15");
                                        interestRateField.setText("5.50");
                                       paymentField.setText("0.00");
                                       dataReportArea.setText("  \n");
                                       interestRateField.setEditable(false);
                                       yearsTermField.setEditable(false);
                                    }
                                 else if (sel.getText().equals("Rate 3 - 30 years at 5.75%  (360 - Payments)"))
                                    {
                                       paymentZeroFlag = true;
                                       System.out.println("30 year loan at 5.75% selected");           // Debug purposes only
                                       arraynum = 2;  //  Selection rate3RadioButton used for array number 3
                                       yearsTermField.setText("30");
                                       interestRateField.setText("5.75");
                                       paymentField.setText("0.00");
                                       dataReportArea.setText("  \n");
                                       interestRateField.setEditable(false);
                                       yearsTermField.setEditable(false);
                                    }
                                 else if (sel.getText().equals("Enter Information Manually"))
                                    {
                                        paymentZeroFlag = true;
                                        System.out.println("Enter Information Manually");           // Debug purposes only
                                        arraynum = 3;  //  Selection rate3RadioButton used for array number 4
                                        yearsTermField.setText("0");
                                        interestRateField.setText("0.0");
                                        paymentField.setText("0.00");
                                        dataReportArea.setText("  \n");
                                        interestRateField.setEditable(true);
                                        yearsTermField.setEditable(true);
                                    }
                              }  //  End ItemSelected block
                       }  //  End ItemStateChanged
              }  //  End SelectItemListner block
         // Compute the monthly payment based on the loan amount,
         public double calculatePayment( double loanAmt, double rate, int numPeriods)
             {
                 double monthlyPayment = 0;
                 double monthlyInterestRate = (rate / 100 / 12);
                 numPeriods *= 12;
                 monthlyPayment = ((loanAmt * Math.pow((1 + monthlyInterestRate), numPeriods))
                                                       * monthlyInterestRate)            / (Math.pow((1 + monthlyInterestRate), numPeriods) - 1);
                 return monthlyPayment;
             }
         // main program block
         public static void main(String[] args)
            {
                //Create and set up the window.
               JFrame frame = new JFrame("Loan Shark Financial Services    -   Version 4.5");
               frame.setSize(800, 600);
               frame.setLocation(100, 200);
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               //Create and set up the content pane.
              JComponent newContentPane = new MortgageCalcMRP();
               newContentPane.setOpaque(true);
               frame.setContentPane(newContentPane);
               //Display the window.
               frame.pack();
               frame.setVisible(true);
            }  //  End main program block
   }  //  End MortgageMRP class
RICKPOWELL1955Asked:
Who is Participating?
 
objectsConnect With a Mentor Commented:
>  if (Double.parseDouble( paymentField.getText().trim()) <=  0.0)

this is causing an error if the field is blank

either check it, or use a try/catch (as you have for the calculate)
0
 
objectsCommented:
can u post the stack trace
0
 
RICKPOWELL1955Author Commented:
I can take a screen dump and save as a JPeg but how can I attach the file?
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
objectsCommented:
you can't attach a file

i will run your app if i get some time this arvo
0
 
gen718Commented:
I ran it in Eclipse and got a NumberFormatException at that source line.

0
 
gnoonCommented:
>You will get my code checked error and notice a square in the Monthly Payment Amount field.

Actually, the original cause of errors is in your calculatePayment() function.


        // These 2 commands are inside getPayment(), which show the error.
        payment = calculatePayment(amount, rate, numPeriods);  
        paymentField.setText(paymentFormat.format(payment));  //<----- show number in textfield (the square character)


        // This function returns Not a Number(NaN), which cause the error.
         public double calculatePayment( double loanAmt, double rate, int numPeriods)
             {
                 double monthlyPayment = 0;
                 double monthlyInterestRate = (rate / 100 / 12);
                 numPeriods *= 12;
                 monthlyPayment = ((loanAmt * Math.pow((1 + monthlyInterestRate), numPeriods))
                                                       * monthlyInterestRate)          / (Math.pow((1 + monthlyInterestRate), numPeriods) - 1);
                 return monthlyPayment;
             }

It returns NaN because the divisor is Zero.
                (Math.pow((1 + monthlyInterestRate), numPeriods) - 1)    ==  0.0
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.