0

We were just introduced last week to GUI's and now Threads. We were given an assignment where we need to create a panel that collects an upperBound, lowerBound, incrementValue and delayBetweenEachCount from the user via Text Fields. The panel needs to contain Start, Pause, and Continue buttons allowing the user to have full control over the program as it counts from the lowerBound to the upperBound by the incrementValue with a specific delayBetweenEachCount.

I have just recently started working on it and am very confused and I apologize if the code is rather silly.

I have no idea how to read the error message. I would greatly appreciate if someone could highlight some of the areas where I'm going wrong. Any help is very much appreciated. Thanks in advance.

I am getting the following error message when I attempt to run the code:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at assignment5.CounterPanel.<init>(CounterPanel.java:139)
    at assignment5.CounterPanel$2.run(CounterPanel.java:119)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)

This is my current incomplete code:

        public class CounterPanel extends javax.swing.JFrame {

    // Creates new form
    public CounterPanel() {
        initComponents();
    }
//Thread counter = new Thread(new Counter(lower, upper, valueIncrement, timeDelay));
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        lowerBoundLabel = new javax.swing.JLabel();
        upperBoundLabel = new javax.swing.JLabel();
        lowerBoundTextField = new javax.swing.JTextField();
        upperBoundTextField = new javax.swing.JTextField();
        incrementValueLabel = new javax.swing.JLabel();
        delayValueLabel = new javax.swing.JLabel();
        incrementValueTextField = new javax.swing.JTextField();
        delayValueTextField = new javax.swing.JTextField();
        startButton = new javax.swing.JButton();
        pauseButton = new javax.swing.JButton();
        continueButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Counter");

        lowerBoundLabel.setText("Lower bound:");
        lowerBoundLabel.setName(""); // NOI18N

        upperBoundLabel.setText("Upper bound: ");

        incrementValueLabel.setText("Increment value:");

        delayValueLabel.setText("Delay value: ");

        startButton.setText("Start");
        startButton.setName(""); // NOI18N
        startButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                startButtonActionPerformed(evt);
            }
        });

        pauseButton.setText("Pause");

        continueButton.setText("Continue");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(incrementValueLabel)
                    .addComponent(upperBoundLabel)
                    .addComponent(lowerBoundLabel)
                    .addComponent(delayValueLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(incrementValueTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
                    .addComponent(upperBoundTextField, javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lowerBoundTextField)
                    .addComponent(delayValueTextField))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 135, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(continueButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pauseButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(startButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(15, 15, 15))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(55, 55, 55)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lowerBoundTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(lowerBoundLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(upperBoundLabel)
                            .addComponent(upperBoundTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(incrementValueLabel)
                            .addComponent(incrementValueTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(65, 65, 65)
                        .addComponent(startButton)
                        .addGap(26, 26, 26)
                        .addComponent(pauseButton)))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(delayValueLabel)
                            .addComponent(delayValueTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(5, 5, 5)
                        .addComponent(continueButton)))
                .addContainerGap(87, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
      counter.start();
    }                                           

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CounterPanel().setVisible(true);
            }
        });

    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton continueButton;
    private javax.swing.JLabel delayValueLabel;
    private javax.swing.JTextField delayValueTextField;
    private javax.swing.JLabel incrementValueLabel;
    private javax.swing.JTextField incrementValueTextField;
    private javax.swing.JLabel lowerBoundLabel;
    private javax.swing.JTextField lowerBoundTextField;
    private javax.swing.JButton pauseButton;
    private javax.swing.JButton startButton;
    private javax.swing.JLabel upperBoundLabel;
    private javax.swing.JTextField upperBoundTextField;
    // End of variables declaration                   

int upper = Integer.parseInt(upperBoundTextField.getText());
int lower = Integer.parseInt(lowerBoundTextField.getText());
int valueIncrement = Integer.parseInt(incrementValueTextField.getText());
int timeDelay = Integer.parseInt(delayValueTextField.getText());
Thread counter = new Thread(new Counter(lower, upper, valueIncrement, timeDelay));
}

public class Counter implements Runnable{
    int start;
    int end;
    int delayTime;
    int incrementValue;
    int i;

    public Counter(int lower, int upper, int timeDelay, int valueIncrement){
        start = lower;
        end = upper;   
        delayTime = timeDelay;
        incrementValue = valueIncrement;
        i = lower;
    }


    public void run(){
        try{
            while(i <= end)
                Thread.sleep(delayTime);
                System.out.print(i);
                i += incrementValue;
        }catch(Exception e){}
    }

}
Selma
  • 1
  • 1

1 Answers1

1

When you create a CounterPanel, it creates a Counter. But Counter extends CounterPanel. So constructing a CounterPanel creates a Counter, which creates a Counter, which creates a Counter, which creates a Counter, ...

There is absolutely no reason for Counter to extend CounterPanel.

JB Nizet
  • 633,450
  • 80
  • 1,108
  • 1,174
  • Thank you, that makes sense. I have tried to adjust the code and am now getting NullPointerException. Could you please let me know if you have any idea what this is referring to? Thank you very much for all your help. – Selma Jul 01 '16 at 09:42
  • http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it. Sorry, but dealing with threads is way too early if you don't understand what a NullPointerException is and how to analyze the error and fix it. – JB Nizet Jul 01 '16 at 09:48
  • Also, my answer looks completely weird and incorrect now that you completely changed your question. Don't do that. If your initial problem is resolved, then accept the answer, start working on the next problem, and if you're stuck, ask **another** question. – JB Nizet Jul 01 '16 at 09:50