Applet nullpointerexception和科学项目的帮助

时间:2015-02-23 11:45:44

标签: java nullpointerexception applet

联合国宣布2015年为国际光与光技术年(IYL 2015)。我们开发了土耳其官方网站,并开发了三个互动小程序,帮助年轻一代了解电磁波的一些基本功能。

当我尝试从IDE运行时,applet可以运行。但是当尝试通过html代码在浏览器上运行时,每个都会出现“nullpointerexception”错误。我需要帮助来解决错误。

多普勒小程序是一个日食项目,其他是Intellij项目。我给出了源代码。

用于向网站添加applet的HTML代码示例(实际上,代码是由netbeans生成的):

<APPLET codebase="classes" code="src/Doppler.class" width=350 height=200></APPLET>

折射 - 反射小程序:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Refraction extends JApplet implements ActionListener {

int finPoint=200;
int upperLineFinx=finPoint;
int upperLineFiny=finPoint;
int bottomLineBegx=upperLineFinx;
int bottomLineBegy=upperLineFiny;
int lengthOfLines=150;
double teta1=50*Math.PI/180;
double n1=1;
double n2= 1;
double teta2= Math.asin((n1 / n2) * Math.sin(teta1)) ;
double temp;
static final int angle_min = 0;
static final int angle_max = 90;
static final int angle_rate = 15;
Vector model1=new Vector();
Vector model2=new Vector();
JSlider angle_slider;
JComboBox n1ComboBox,n2ComboBox;
JButton button1;
JTextField incidenceTF,refractionTF,n1TF,n2TF;
JLabel yan_kir_lab;
Graphics bufferGraphics;
Image offImg;
Dimension dim,dimSlider;

public Refraction(){
    model1.addElement(new Item(1,"Hava"));
    model1.addElement(new Item(1.309,"Buz"));
    model1.addElement(new Item(1.333,"Su"));
    model1.addElement(new Item(1.36,"Ethanol"));
    model1.addElement(new Item(1.47,"Zeytin Yağı"));
    model1.addElement(new Item(1.48,"Cam"));
    model1.addElement(new Item(2.42,"Elmas"));

    button1=new JButton("Değiştir");
    n1ComboBox=new JComboBox(model1);
    n2ComboBox=new JComboBox(model1);
}

public void init(){
    incidenceTF=new JTextField(String.valueOf(teta1/Math.PI*180));
    refractionTF=new JTextField(String.valueOf(teta2/Math.PI*180));
    n1TF=new JTextField(String.valueOf(n1));
    n2TF=new JTextField(String.valueOf(n2));
    yan_kir_lab=new JLabel(" Kırılma Açısı=");
    dim= new Dimension(600, 400);
    this.setSize(dim);
    setBackground(Color.white);
    setLayout(new BorderLayout());
    Panel p1=new Panel();
    Panel p2=new Panel();
    Panel p3=new Panel();
    p1.setBackground(new Color(0xEBE669));
    p1.setLayout(new GridLayout(10, 0));
    addLabel(" Aci", p1);
    addSlider(p1);
    addnCombobox(n1ComboBox, 1, p1);
    addnCombobox(n2ComboBox,2,p1);
    p1.add(new Label());
    p2.setBackground(new Color(0xEBE669));
    p2.setSize(new Dimension(200, 200));
    p2.setLayout(new GridLayout(2, 2));
    p2.add(new JLabel(" Gelme Açısı="));
    p2.add(incidenceTF);
    p2.add(yan_kir_lab);
    p2.add(refractionTF);
    p1.add(p2);
    p3.setBackground(new Color(0xEBE669));
    p3.setSize(new Dimension(200, 200));
    p3.setLayout(new GridLayout(2, 2));
    p3.add(new JLabel(" n1="));
    p3.add(n1TF);
    p3.add(new JLabel(" n2="));
    p3.add(n2TF);
    p1.add(p3);
    add(p1, BorderLayout.EAST);
    offImg=createImage(dim.width,dim.height);
    bufferGraphics=offImg.getGraphics();
    angle_slider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            teta1=(((JSlider) e.getSource()).getValue())*Math.PI/180;
            temp=(n1 / n2) * Math.sin(teta1);
            //Math.asin((n1 / n2) * Math.sin(teta1 * Math.PI / 180.0))
            if(temp>=1){
                teta2 = teta1;
                yan_kir_lab.setText(" Yansıma Açısı=");
            }
            else{ teta2 = Math.asin(temp);
                  yan_kir_lab.setText(" Kırılma Açısı=");
            }
            String teta1tostring=String.valueOf(teta1/Math.PI*180);
            String teta2tostring=String.valueOf(teta2/Math.PI*180);
            if(teta1tostring.length()>5) teta1tostring=teta1tostring.substring(0,5);
            if (teta2tostring.length()>5) teta2tostring=teta2tostring.substring(0,5);
            incidenceTF.setText(teta1tostring);
            refractionTF.setText(teta2tostring);
            repaint();
        }
    });
    this.setVisible(true);

}
public void actionPerformed(ActionEvent e) {



    if(e.getSource()==n1ComboBox){
        Item item1 = (Item) n1ComboBox.getSelectedItem();
        n1 = item1.getValue();
        repaint();
    }
    else if (e.getSource()==n2ComboBox){
        Item item2=(Item) n2ComboBox.getSelectedItem();
        n2=item2.getValue();
        repaint();
    }

    repaint();
}

public void addLabel( String text ,Container cont){
    JLabel label=new JLabel();
    label.setText(text);
    cont.add(label);
}

public void addSlider(Container conteiner){
    angle_slider=new JSlider(JSlider.HORIZONTAL,angle_min,angle_max,angle_rate);
    dimSlider=new Dimension(200,40);
    angle_slider.setValue((int)(teta1*180/Math.PI));
    angle_slider.setBackground(new Color(0xEBE669));
    angle_slider.setMajorTickSpacing(15);
    angle_slider.setMinorTickSpacing(5);
    angle_slider.setPaintLabels(true);
    angle_slider.setPreferredSize(dimSlider);
    angle_slider.setAlignmentX(Component.RIGHT_ALIGNMENT);
    angle_slider.setVisible(true);
    conteiner.add(angle_slider);
}
public void addnCombobox(JComboBox cb, final int whichComboBox,Container cont){

    cb.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(whichComboBox==1){
                Item item1 = (Item) n1ComboBox.getSelectedItem();
                n1 = item1.getValue();
                n1TF.setText(String.valueOf(n1));
                repaint();
            }
            else if (whichComboBox==2){
                Item item2=(Item) n2ComboBox.getSelectedItem();
                n2=item2.getValue();
                n2TF.setText(String.valueOf(n2));
                repaint();
            }
        }
    });
    cont.add(cb);
}

public void paint (Graphics g) {


    bufferGraphics.clearRect(0, 0, dim.width, dim.height);
    bufferGraphics.setColor(Color.white);

    bufferGraphics.setColor(new Color(0xB1EFEE));
    bufferGraphics.fillRect(0, 200, 400, 400);

    bufferGraphics.setColor(Color.red);
    bufferGraphics.drawLine(200,0,200,400);
    bufferGraphics.drawLine(0,200,400,200);

    bufferGraphics.setColor(Color.black);
    bufferGraphics.drawLine((int)(200-lengthOfLines*Math.sin(teta1)),(int)(200-lengthOfLines*Math.cos(teta1)),upperLineFinx,upperLineFiny);


    if(temp>=1){
        bufferGraphics.drawLine(bottomLineBegx,bottomLineBegy,(int)(200+lengthOfLines*Math.sin(teta2)),(int)(200-lengthOfLines*Math.cos(teta2)));
    }
    else {
        bufferGraphics.drawLine(bottomLineBegx, bottomLineBegy, (int) (200 + lengthOfLines * Math.sin(teta2)), (int) (200 + lengthOfLines * Math.cos(teta2)));
    }
    g.drawImage(offImg,0,0,this);
}
public void update(Graphics g)
{
    paint(g);
}




class Item
{
    private double value;
    private String description;

    public Item(double value, String description)
    {
        this.value = value;
        this.description = description;
    }

    public double getValue()
    {
        return value;
    }

    public String getDescription()
    {
        return description;
    }

    public String toString()
    {
        return description;
    }
}

}

组和相速度小程序:

import javafx.scene.control.Slider;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.BasicStroke;
import java.awt.Graphics2D;


public class GrupVeFazHizi extends JApplet implements ActionListener {

Timer timer= new Timer(30,this);
Graphics2D bufferGraphics;
Image offImg;
Dimension dim;
int[] xs;
int[] ys,ys2,ys3;
int pixelNumber=600;
int yBase=120;
double t;
int waveAmp=100;
private double k=0.3;
int phaseVel=20;
double groupVel=phaseVel*1.4;
double L=50;
boolean repeatCheck;
Dimension sliderDim,labelDim;
Border b = BorderFactory.createLineBorder( new Color(0x96937E), 1 );
JSlider groupVelSlider=new JSlider(JSlider.HORIZONTAL,0,100,1);
JSlider phaseVelSlider=new JSlider(JSlider.HORIZONTAL,0,100,1);
JSlider waveAmpSlider=new JSlider(JSlider.HORIZONTAL,0,150,1);
JSlider kSlider=new JSlider(JSlider.HORIZONTAL,0,10,1);
JSlider lSlider=new JSlider(JSlider.HORIZONTAL,0,100,1);


Label grupHiziLabel=new Label("            Grup Hızı");
public void init(){
    xs=new int[pixelNumber];
    ys=new int[pixelNumber];
    ys2=new int[pixelNumber];
    ys3=new int[pixelNumber];
    labelDim=new Dimension(50,50);
    grupHiziLabel.setPreferredSize(labelDim);
    prepareSliders();

    repeatCheck=false;
    t=0.01;
    dim=new Dimension(600,400);
    this.setSize(dim);
    setBackground(Color.white);
    offImg=createImage(dim.width,dim.height);
    bufferGraphics=(Graphics2D) offImg.getGraphics();
    setLayout(new BorderLayout());
    Panel p1= new Panel();
    p1.setSize(new Dimension(200,200));
    p1.setBackground(new Color(0xFF9C7C));
    p1.setLayout(new GridLayout(2, 5));
    //p1.add(new Label("Grup Hızı"));
    p1.add(grupHiziLabel);
    p1.add(new Label("             Faz Hızı"));
    p1.add(new Label("       Dalga Genliği"));
    p1.add(new Label("     Dalga Sayısı*10"));
    p1.add(new Label("        Dalga Boyu"));
    addSlider(groupVelSlider, p1);
    addSlider(phaseVelSlider, p1);
    addSlider(waveAmpSlider, p1);
    addSlider(kSlider, p1);
    addSlider(lSlider,p1);
    add(p1, BorderLayout.SOUTH);
    timer.setRepeats(true);
    timer.start();
    for(int i=0;i<pixelNumber;i++){
        xs[i]=i;
        ys[i]=yBase;
        ys2[i]=yBase;
        ys3[i]=yBase;
    }
}
public void paint (Graphics g){
    bufferGraphics.clearRect(0,0,dim.width,dim.height);
    bufferGraphics.setColor(Color.white);
    bufferGraphics.setStroke(new BasicStroke(1.0f));

    bufferGraphics.setColor(Color.black);
    bufferGraphics.drawPolyline(xs, ys, pixelNumber);
    bufferGraphics.setColor(Color.red);
    bufferGraphics.setStroke(new BasicStroke(2.0f));
    bufferGraphics.drawPolyline(xs,ys2,pixelNumber);
    bufferGraphics.drawPolyline(xs,ys3,pixelNumber);
    g.drawImage(offImg,0,0,this);
}
public void update(Graphics g)
{
    paint(g);
}
@Override
public void actionPerformed(ActionEvent e) {
    for(int i=0;i<pixelNumber;i++){
        ys[i]=yBase+(int) (waveAmp*(Math.exp(-Math.pow((((xs[i]+110)-groupVel*t)/L),2))* Math.cos(k*(xs[i]-phaseVel*t))));
        ys2[i]=yBase+(int)(waveAmp*Math.exp(-Math.pow((((xs[i]+110)-groupVel*t)/L),2)));
        ys3[i]=yBase+(int)(-waveAmp*Math.exp(-Math.pow((((xs[i]+110)-groupVel*t)/L),2)));
    }
    if(ys2[pixelNumber-1]>yBase+2){
        repeatCheck=true;
    }
    if(repeatCheck==true && ys2[pixelNumber-1]<=(yBase)){
        repeatCheck=false;
        t=0.01;
    }
    t=t+0.05;
    repaint();
}
public void addSlider(final JSlider slider,Container container){
    slider.setPreferredSize(new Dimension(100,20));
    slider.setAlignmentX(Component.LEFT_ALIGNMENT);
    slider.setBackground(new Color(0xF5FF9B));
    slider.setBorder(b);
    slider.setVisible(true);
    slider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            if(slider==groupVelSlider)             groupVel=slider.getValue();
            else if (slider==phaseVelSlider)       phaseVel=slider.getValue();
            else if (slider==waveAmpSlider)        waveAmp=waveAmpSlider.getValue();
            else if (slider==kSlider)              k=kSlider.getValue()/10.0;
            else                                   L=lSlider.getValue();
            repaint();
        }
    });
    container.add(slider);
}
private void prepareSliders(){
    sliderDim=new Dimension(150,40);
    groupVelSlider.setPreferredSize(sliderDim);
    phaseVelSlider.setPreferredSize(sliderDim);
    waveAmpSlider.setPreferredSize(sliderDim);
    kSlider.setPreferredSize(sliderDim);
    lSlider.setPreferredSize(sliderDim);

    groupVelSlider.setValue((int) groupVel);
    phaseVelSlider.setValue(phaseVel);
    waveAmpSlider.setValue(waveAmp);
    kSlider.setValue((int) (k*10));
    lSlider.setValue((int) L);

    groupVelSlider.setMajorTickSpacing(50);
    phaseVelSlider.setMajorTickSpacing(50);
    waveAmpSlider.setMajorTickSpacing(75);
    kSlider.setMajorTickSpacing(5);
    lSlider.setMajorTickSpacing(50);

    groupVelSlider.setPaintLabels(true);
    phaseVelSlider.setPaintLabels(true);
    waveAmpSlider.setPaintLabels(true);
    kSlider.setPaintLabels(true);
    lSlider.setPaintLabels(true);
}
}

多普勒效应小程序:

package Doppler;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.applet.AppletContext;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
import java.awt.BasicStroke;
import java.awt.Graphics2D;



public class Doppler extends JApplet implements ActionListener {

Graphics2D bufferGraphics;
Image offImg;
Dimension dim;
Timer timer= new Timer(30,this);
int waveVelocity=3;
int waveNumber=1000;
int waveFrequency=30;
int frequencyCheck=0;
int maxFrequency=60;
Circle[] circles = new Circle[waveNumber];
AmbulanceObj amb=new AmbulanceObj();
Image ambulanceImage,buildings, ground;
AppletContext context;
int circleNumber=waveNumber;
private int sayac;
Label ambVelLabel,waveVelLabel,frequencyLabel;
JSlider ambVelSlider=new JSlider(0,5,1);
JSlider waveVelSlider=new JSlider(0,5,1);
JSlider frequencySlider=new JSlider(1,maxFrequency,1);
Border b = BorderFactory.createLineBorder( new Color(0x96937E), 1 );





public class Circle {
    int centx=0;
    int centy=0;
    int radiusx=0;
    int radiusy=0;
    int velocity=0;
    public Circle(int x,int y, int radx,int rady, int vel){
        this.centx=x;
        this.centy=y;
        this.radiusx=radx;
        this.radiusy=rady;
        this.velocity=vel;
    }
    public Circle(int x,int y) {
        this.centx = x;
        this.centy = y;
    }
}
public class AmbulanceObj{
    int ambX=0;
    int ambY=255;
    int ambWidth=50;
    int ambHeight=20;
    int ambVelocity=1;
}
public void addSlider(final JSlider slider,Container container){
    slider.setPreferredSize(new Dimension(100,20));
    slider.setAlignmentX(Component.LEFT_ALIGNMENT);
    slider.setBackground(new Color(0xF5FF9B));
    slider.setBorder(b);
    slider.setVisible(true);
    slider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            if(slider==ambVelSlider) amb.ambVelocity=ambVelSlider.getValue();
            else if(slider==waveVelSlider) waveVelocity=waveVelSlider.getValue();
            else if (slider==frequencySlider) waveFrequency=maxFrequency-frequencySlider.getValue()+1;
            repaint();
        }
    });
    container.add(slider);
}
public Image getImage(String name)
{
    URL imgUrl = getClass().getClassLoader().getResource("resources/"+name);
    ImageIcon icon = new ImageIcon(imgUrl);
    return icon.getImage();
}

public void init(){
    amb.ambX=-20;
    ambVelLabel=new Label("   Ambulans Hızı:");
    waveVelLabel=new Label("     Dalga Hızı:");
    frequencyLabel=new Label("      Frekans:");
    ambVelSlider.setValue(amb.ambVelocity);
    waveVelSlider.setValue(waveVelocity);
    frequencySlider.setValue(maxFrequency-waveFrequency+1);
    ambulanceImage= getImage("ambulance1.png");
    buildings= getImage("rsz_building3.png");
    ground= getImage("rsz_3ground.png");

    for (int i=0;i<circleNumber;i++){
        circles[i]=new Circle(amb.ambX+amb.ambWidth,amb.ambY);
        circles[i].velocity=0;
    }

    dim= new Dimension(600,400);
    this.setSize(dim);
    setBackground(new Color(0xD4FFFC));
    setLayout(new BorderLayout());
    Panel p1= new Panel();
    p1.setSize(new Dimension(600,20));
    p1.setBackground(new Color(0xEBE669));
    p1.setLayout(new GridLayout(0, 6));
    p1.add(ambVelLabel);
    addSlider(ambVelSlider,p1);
    p1.add(waveVelLabel);
    addSlider(waveVelSlider,p1);
    p1.add(frequencyLabel);
    addSlider(frequencySlider,p1);
    add(p1, BorderLayout.SOUTH);

    offImg=createImage(dim.width,dim.height);
    bufferGraphics=(Graphics2D) offImg.getGraphics();
    sayac=0;
    timer.setRepeats(true);
    timer.start();

}

public void paint( Graphics g){

    bufferGraphics.clearRect(0,0,dim.width,dim.height);
    bufferGraphics.drawImage(buildings,0,0,this);
    bufferGraphics.drawImage(ambulanceImage,amb.ambX,amb.ambY,this);
    bufferGraphics.setColor(new Color(0xBF3002));
    bufferGraphics.setStroke(new BasicStroke(2.0f));
    for(int a=0;a<waveNumber;a++) {
        bufferGraphics.drawOval(circles[a].centx - (circles[a].radiusx / 2), circles[a].centy - (circles[a].radiusy / 2), circles[a].radiusx, circles[a].radiusy);
    }
    bufferGraphics.setStroke(new BasicStroke(1.0f));
    bufferGraphics.drawImage(ground,0,300,this);
    g.drawImage(offImg,0,0,this);
}
public void update(Graphics g)
{
    paint(g);
}

@Override
public void actionPerformed(ActionEvent e) {
    amb.ambX+=amb.ambVelocity;
    if((frequencyCheck% (double) waveFrequency==0 && amb.ambX+amb.ambWidth<600) ){
        circles[sayac].centx=amb.ambX+amb.ambWidth;
        circles[sayac].centy=amb.ambY+10;
        circles[sayac].velocity=waveVelocity;
        sayac+=1;
    }


    else if(amb.ambX+amb.ambWidth>=600 || circles[waveNumber-1].velocity>0){
        amb.ambX=-20;
        for (int i=0;i<circleNumber;i++){
            circles[i]=new Circle(amb.ambX+amb.ambWidth,amb.ambY);
            circles[i].velocity=0;
        }
        sayac=0;
        frequencyCheck=0;
    }
    for(int a=0;a<waveNumber;a++){
        circles[a].radiusx+=circles[a].velocity;
        circles[a].radiusy+=circles[a].velocity;
    }
    frequencyCheck=frequencyCheck+1;
    repaint();
}
}

0 个答案:

没有答案