Делаю графический калькулятор со слайдерами для ввода значений коэффициентов функций. Eclipse ни в какую не запускает и не компилирует код,а в консоли выдаёт java.lang.NullPointerException. Как это исправить и в чём суть ошибки? вот код:
package pack;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.Canvas;
import javax.swing.JSlider;
import java.awt.Color;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
public class GDC {
private JFrame frame;
private double h=0;
private double k=0;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GDC window = new GDC();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GDC() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 550, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
Canvas canvas = new Canvas();
canvas.setBackground(Color.WHITE);
canvas.setBounds(10, 38, 300, 300);
frame.getContentPane().add(canvas);
JSlider slider = new JSlider();
slider.setValue(0);
slider.setMinimum(-100);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
h= slider.getValue();
k = slider.getValue();
Graphics g =canvas.getGraphics();
canvas.update(g);
g.setColor(Color.black);
g.drawLine(0,canvas.getHeight()/2,canvas.getWidth(),canvas.getHeight()/2);
g.drawLine(canvas.getWidth()/2,0, canvas.getWidth()/2, canvas.getHeight());
double y1=0;
double y2=0;
g.setColor(Color.red);
g.translate(canvas.getWidth()/2, canvas.getHeight()/2);
for (double x =-300; x<301 ; x++)
{
y1= Math.pow(x-h, 2)+k;
y2= Math.pow(x+1-h, 2)+k;
g.drawLine((int)x, (int) -y1, (int)x+1, (int) -y2);
}
}
});
slider.setBounds(325, 40, 200, 25);
frame.getContentPane().add(slider);
JLabel lblInputBValue = new JLabel("Input k value");
lblInputBValue.setBounds(385, 15, 77, 14);
frame.getContentPane().add(lblInputBValue);
JLabel lblYaxkp = new JLabel("y=a(x-h)+k");
lblYaxkp.setFont(new Font("Times New Roman", Font.ITALIC, 25));
lblYaxkp.setBounds(23, 3, 151, 29);
frame.getContentPane().add(lblYaxkp);
JSlider slider_1 = new JSlider();
slider_1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
h= slider.getValue();
k = slider.getValue();
Graphics g =canvas.getGraphics();
canvas.update(g);
g.setColor(Color.black);
g.drawLine(0,canvas.getHeight()/2,canvas.getWidth(),canvas.getHeight()/2);
g.drawLine(canvas.getWidth()/2,0, canvas.getWidth()/2, canvas.getHeight());
double y1=0;
double y2=0;
g.setColor(Color.red);
g.translate(canvas.getWidth()/2, canvas.getHeight()/2);
for (double x =-300; x<301 ; x++)
{
y1= Math.pow(x-h,2)+k;
y2= Math.pow(x+1-h,2)+k;
g.drawLine((int)x, (int) -y1, (int)x+1, (int) -y2);
}
}
});
slider_1.setValue(0);
slider_1.setMinimum(-100);
slider_1.setBounds(325, 127, 200, 25);
frame.getContentPane().add(slider_1);
JSlider slider_2 = new JSlider();
slider_2.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
}
});
slider_2.setValue(0);
slider_2.setMinimum(-100);
slider_2.setBounds(325, 226, 200, 25);
frame.getContentPane().add(slider_2);
JLabel lblInputKValue = new JLabel("Input h value");
lblInputKValue.setBounds(385, 102, 77, 14);
frame.getContentPane().add(lblInputKValue);
JLabel lblInputAValue = new JLabel("Input a value");
lblInputAValue.setBounds(385, 201, 77, 14);
frame.getContentPane().add(lblInputAValue);
}
}