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){}
}
}