尝试在Java Swing程序中查找错误

尝试在Java Swing程序中查找错误,java,swing,user-interface,jframe,Java,Swing,User Interface,Jframe,这是我的节目。。。这是一种进入并列出马拉松运动员名单的方式。现在我在使用“Ny”按钮()时出错。以下是错误代码: 我认为问题在于“表单”面板和侦听器之间。某个地方可能有无法访问的代码?前几天我用过这个,但是我把代码弄丢了。现在它不起作用了。 想法是“ny”按钮向用户显示一个面板“表单”,但我得到的是错误 我是一个大傻瓜,所以我想这是一些明显的语法错误,我就是看不出来。 任何反馈都将不胜感激 import javax.swing.*; import java.awt.*; import java.

这是我的节目。。。这是一种进入并列出马拉松运动员名单的方式。现在我在使用“Ny”按钮()时出错。以下是错误代码:

我认为问题在于“表单”面板和侦听器之间。某个地方可能有无法访问的代码?前几天我用过这个,但是我把代码弄丢了。现在它不起作用了。 想法是“ny”按钮向用户显示一个面板“表单”,但我得到的是错误

我是一个大傻瓜,所以我想这是一些明显的语法错误,我就是看不出来。 任何反馈都将不胜感激

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Maraton extends JFrame{

JTextArea display; 
JButton visa;

ArrayList <Tävlande> list = new ArrayList <Tävlande>();




Maraton(){
    super("Kista Maraton");
    display = new JTextArea();
    display.setEditable(false);

    add(display, BorderLayout.CENTER);
    add(new JScrollPane(display),BorderLayout.CENTER);
    setLocationRelativeTo(null);
    setSize(300, 400);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);



    JPanel nedre = new JPanel ();
    JPanel höger = new JPanel();

    add(nedre, BorderLayout.SOUTH);
    add(höger, BorderLayout.EAST);
    höger.setLayout(new BoxLayout(höger, BoxLayout.Y_AXIS));

    nedre.setBackground( new Color(246,246,246) );
    nedre.setBorder(BorderFactory.createLineBorder(new Color(200,200,200)));


    JButton ny = new JButton("Ny");
    ny.addActionListener(new NyLis());

    JButton visa = new JButton("Visa");
    visa.addActionListener(new VisaLis());
    visa.setEnabled(false);

    JButton nyTid = new JButton("Ny Tid");

    nedre.add(ny);
    nedre.add(visa);
    nedre.add(nyTid);



    JRadioButton StartNrRb = new JRadioButton("Startnr");
    JRadioButton NamnRb = new JRadioButton("Namn");
    JRadioButton ÅlderRb = new JRadioButton("Ålder");
    JRadioButton TidRb = new JRadioButton("Tid");

    höger.add(StartNrRb);
    höger.add(NamnRb);
    höger.add(ÅlderRb);
    höger.add(TidRb);

    ButtonGroup bg1 = new ButtonGroup();
    bg1.add(NamnRb);
    bg1.add(StartNrRb);
    bg1.add(ÅlderRb);
    bg1.add(TidRb);

}

class Form2 extends JPanel{
    JTextField startNrFält;
    JTextField tidFält;

    Form2(){
        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
        JPanel rad0 = new JPanel();
        rad0.add(new JLabel("Start Nummer: "));
        rad0.add(new JLabel("Tid: "));
        rad0.setLayout(new BoxLayout(rad0, BoxLayout.Y_AXIS));
        rad0.add(startNrFält);
        rad0.add(tidFält);
        add(rad0);

    }
}

class Form extends JPanel{
    JTextField namnFält;
    JTextField landFält;
    JTextField ålderFält;




    Form(){

        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        JPanel rad1 = new JPanel();
        rad1.add(new JLabel("Namn: "));
        namnFält = new JTextField(15);
        rad1.add(namnFält);
        add(rad1);

        JPanel rad2 = new JPanel();
        rad2.add(new JLabel("Land: "));
        landFält = new JTextField(15);
        rad2.add(landFält);
        add(rad2);

        JPanel rad3 = new JPanel();
        rad3.add(ålderFält);
        rad3.add(new JLabel("Ålder: "));
        ålderFält = new JTextField(5);
        rad3.add(ålderFält);
        add(rad3);


    }

}



class NyLis implements ActionListener{
    public void actionPerformed(ActionEvent ave){
        Form f = new Form();

        int svar = JOptionPane.showConfirmDialog(null, f);


        String namn = f.namnFält.getText();
        String land = f.landFält.getText();
        int ålder = Integer.parseInt(f.ålderFält.getText());


        Tävlande tv = new Tävlande (namn,land,ålder);
        list.add(tv);
        visa.setEnabled(true);
    }

}





class VisaLis implements ActionListener{
    public void actionPerformed(ActionEvent ave) {
        display.setText("");
        for (Tävlande t : list){
            display.append(t.toString()+"\n");
        }
    }

}

class NyTidLis implements ActionListener{
    public void actionPerformed(ActionEvent ave) {

        Form f2 = new Form();

        JOptionPane.showMessageDialog(null, f2);

    }

}




public static void main (String []args){
    new Maraton();
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公共类Maraton扩展JFrame{
区域显示;
杰布顿签证;
ArrayList=新的ArrayList();
马拉顿(){
超级(“Kista Maraton”);
显示=新的JTextArea();
display.setEditable(false);
添加(显示、边框布局、中心);
添加(新的JScrollPane(显示),BorderLayout.CENTER);
setLocationRelativeTo(空);
设置大小(300400);
setVisible(真);
setDefaultCloseOperation(关闭时退出);
JPanel-nedre=新的JPanel();
JPanel höger=新的JPanel();
添加(nedre,BorderLayout.SOUTH);
添加(höger,BorderLayout.EAST);
höger.setLayout(新的BoxLayout(höger,BoxLayout.Y_轴));
nedre.挫折背景(新颜色(24624662246));
nedre.setBorder(BorderFactory.createLineBorder)(新颜色(200200));
JButton ny=新JButton(“ny”);
addActionListener(new NyLis());
JButton visa=新JButton(“visa”);
visa.addActionListener(新VisaLis());
visa.setEnabled(false);
JButton-nyTid=新JButton(“Ny-Tid”);
nedre.add(纽约);
nedre.add(visa);
nedre.add(纽约市工业贸易署);
JRadioButton STARTNRB=新的JRadioButton(“Startnr”);
JRadioButton NamnRb=新的JRadioButton(“Namn”);
JRadioButtonÅlderRb=新的JRadioButton(“Ålder”);
JRadioButton TidRb=新的JRadioButton(“Tid”);
höger.add(StartNRB);
höger.add(NamnRb);
höger.add(ÅlderRb);
höger.add(TidRb);
ButtonGroup bg1=新建ButtonGroup();
bg1.add(NamnRb);
bg1.add(StartNRB);
bg1.添加(Årderb);
bg1.add(TidRb);
}
类Form2扩展了JPanel{
JTextField startNrFält;
JTextField tidFält;
表格2(){
setLayout(新的BoxLayout(这是BoxLayout.X_轴));
JPanel rad0=新的JPanel();
rad0.add(新JLabel(“Start numer:”);
rad0.添加(新的JLabel(“Tid:”);
rad0.setLayout(新的BoxLayout(rad0,BoxLayout.Y_轴));
rad0.add(startNrFält);
rad0.add(tidFält);
添加(rad0);
}
}
类形式扩展了JPanel{
JTextField namnFält;
JTextField landält;
JTextFieldålderFält;
表格({
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
JPanel rad1=新的JPanel();
rad1.添加(新的JLabel(“Namn:”);
namnFält=新的JTextField(15);
rad1.添加(namnFält);
添加(rad1);
JPanel rad2=新的JPanel();
rad2.添加(新的JLabel(“土地”);
landält=新JTextField(15);
rad2.添加(陆地);
添加(rad2);
JPanel rad3=新的JPanel();
rad3.添加(奥尔德夫阿尔特);
rad3.添加(新的JLabel(“Ålder:”);
åolder fält=新的JTextField(5);
rad3.添加(奥尔德夫阿尔特);
添加(rad3);
}
}
类NyLis实现ActionListener{
已执行的公共无效操作(操作事件ave){
表格f=新表格();
int svar=JOptionPane.showConfirmDialog(null,f);
字符串namn=f.namnFält.getText();
字符串land=f.landält.getText();
intålder=Integer.parseInt(f;
Tävlade tv=新的Tävlade(纳姆、兰德、阿尔德);
列表。添加(电视);
visa.setEnabled(true);
}
}
类VisaLis实现ActionListener{
已执行的公共无效操作(操作事件ave){
display.setText(“”);
for(Tävlade T:list){
display.append(t.toString()+“\n”);
}
}
}
类NyTidLis实现ActionListener{
已执行的公共无效操作(操作事件ave){
表格f2=新表格();
showMessageDialog(null,f2);
}
}
公共静态void main(字符串[]args){
新马拉顿();
}

}

您正在您的类的构造函数中重新定义JButton visa,请点击这一行:

JButton visa = new JButton("Visa");
这与您试图在NyLis actionListener中访问(未初始化)的visa变量定义的类级别(此处This.visa和visa代表两个独立的JButton)不同

将上述行更改为:

visa = new JButton("Visa");

问题是,当您单击
ny
按钮时,您试图将
null
对象添加到
JPanel
。在
表单
对象的构造函数中可以找到有问题的代码:

rad3.add(ålderFält);
ålderFält = new JTextField(5); //NO! Create the JTextFieldObject first
rad3.add(ålderFält);
将代码更改为以下内容:

ålderFält = new JTextField(5);
rad3.add(ålderFält);
rad3.add(ålderFält);
您应该没有问题(或者至少代码可以为我运行)

您的
visa
按钮也有问题。您正在构造函数中声明一个全新的
JButton
,当您尝试启用它时,这将导致更多的
NullPointerException
s


将来,请更仔细地阅读堆栈跟踪。有时,您必须仔细阅读其中的几行代码,以找出代码中的错误所在。当你在做图形化的事情时尤其如此。

你能把图像嵌入到你的文章中吗;这样它们会持续更长的时间并且更容易看到?所以,您尝试访问的内容(第116行附近)没有初始化。我们必须找到那一行并为您调试吗?检查下面的内容
jpanelrad3=newjpanel()在论坛中发布与您的问题相关的所有信息,而不是在其他网站上发布链接。