java GUI帮助-主线程中有错误
基本上我想用java做一个保险申请表。它在JFrame中使用多个JPanel -将JPanel添加到主程序框架中的操作如下:java GUI帮助-主线程中有错误,java,user-interface,swing,Java,User Interface,Swing,基本上我想用java做一个保险申请表。它在JFrame中使用多个JPanel -将JPanel添加到主程序框架中的操作如下: //jpCenterArea to hold jp1-jp7 jpCenterArea.add(jp1); jpCenterArea.add(jp2); jpCenterArea.add(jp3); jpCenterArea.add(jp4); ...etc ********Add Jpanels to JFrame*****/ add(jpTitle, BorderLa
//jpCenterArea to hold jp1-jp7
jpCenterArea.add(jp1);
jpCenterArea.add(jp2);
jpCenterArea.add(jp3);
jpCenterArea.add(jp4); ...etc
********Add Jpanels to JFrame*****/
add(jpTitle, BorderLayout.NORTH);
add(jpCenterArea, BorderLayout.CENTER);
add(jpBottom, BorderLayout.SOUTH);
然而,即使程序可以编译,
它无法运行。错误如下所述:
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl<Container.java:1045>
at java.awt.Container.add<Container.java:365>
at TravelInsuranceApplication.<init>TravelInsuranceApplication.java:120>
at TravelInsuranceApplication.main<TravelInsuranceApplication.java:154>
1 import javax.swing.*;
2 import java.awt.*;
3 public class TravelInsuranceApplication extends JFrame
4 {
5 //declare private variables
6 private JLabel jlblTitle, jlblName, jlblNRIC, jlblAdd, jlblPostal, jlblContact, jlblDOB, 7 jlblEmail, jlblPeriod;
8 private JLabel jlblDeparture, jlblDays, jlblZone, jlblPlan;
9 private JTextField jtfName, jtfIC, jtfAdd, jtfPostal, jtfContact, jtfEmail, jtfZone;
10 private JRadioButton jrbResident, jrbOffice, jrbDeluxe, jrbClassic, jrbAsia, jrbWorldwide;
11 private ButtonGroup bgContact, bgZone, bgPlan;
12 private JComboBox jcDay, jcMonth, jcYear;
13 private JButton jbtnSubmit, jbtnCalculate, jbtnClear;
14 private JPanel jpTitle,jp1, jp2, jp3, jp4, jp5, jp6, jp7, jpBottom, jpCenterArea;
15 String[] day = {"1", "2", "3"};
16 String[] month = {"january", "february"};
17 String[] year = {"1981", "1985", "1990", "1995"};
18
19 //constructor and GUI development
20 public TravelInsuranceApplication()
21 {
22 setSize(500,200);
23 setTitle("Travel Insurance Application");
24 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
25 setLayout(new BorderLayout());
26
27 //create ALL component objects/
28 jlblTitle = new JLabel("Travel Insurance Application: ");
29 jlblName = new JLabel("Name of Insured: ");
30 jlblNRIC = new JLabel("NRIC: ");
31 jlblAdd = new JLabel("Address: ");
32 jlblPostal = new JLabel("Postal Code: ");
33 jlblContact = new JLabel("Telephone: ");
34 jlblDOB = new JLabel("Date Of Birth: ");
35 jlblEmail = new JLabel("Email Address: ");
36 jlblPeriod = new JLabel("Period Of Insurance ");
37 jlblDeparture = new JLabel("Departure Date ");
38 jlblDays = new JLabel("How Many Days To Insure ");
39 jlblZone = new JLabel("Zone: ");
40 jlblPlan = new JLabel("Plan: ");
41
42 jtfName = new JTextField(50);
43 jtfIC = new JTextField(15);
44 jtfAdd = new JTextField(50);
45 jtfPostal = new JTextField(15);
46 jtfContact = new JTextField(15);
47 jtfEmail = new JTextField(50);
48 jtfZone = new JTextField(100);
49
50 jrbResident = new JRadioButton("Rseident/Pgr");
51 jrbOffice = new JRadioButton("Office/HP");
52 jrbAsia = new JRadioButton("Asia");
53 jrbAsia = new JRadioButton("Worldwide");
54 jrbDeluxe = new JRadioButton("Deluxe");
55 jrbClassic = new JRadioButton("Classic");
56
57 jcDay = new JComboBox(day);
58 jcMonth = new JComboBox(month);
59 jcYear = new JComboBox(year);
60
61 jbtnSubmit = new JButton("Submit");
62 jbtnCalculate = new JButton("Calculate");
63 jbtnClear = new JButton("Clear");
64
65 /****create JPanels - jpTitle, JpCenterArea & jp2-jp8 , jpBottom + setLayout 66 for ALL JPanels******/
67 jpTitle = new JPanel(new FlowLayout(FlowLayout.CENTER));
68 jpCenterArea = new JPanel(new FlowLayout());
69 jp1 = new JPanel(new FlowLayout());
70 jp2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
71 jp3 = new JPanel(new FlowLayout());
72 jp4 = new JPanel(new FlowLayout());
73 jp5 = new JPanel(new FlowLayout());
74 jp6 = new JPanel(new FlowLayout(FlowLayout.CENTER));
75 jp7 = new JPanel(new FlowLayout(FlowLayout.CENTER));
76 jpBottom = new JPanel(new FlowLayout(FlowLayout.CENTER));
77
78
79
80
81 //add components to JPanels
82 jpTitle.add(jlblTitle);
83
84 //jp1
85 jp1.add(jlblName);
86 jp1.add(jtfName);
87 jp1.add(jlblNRIC);
88 jp1.add(jtfIC);
89
90 //jp2
91 jp2.add(jlblAdd);
92 jp2.add(jtfAdd);
93 jp2.add(jlblPostal);
94 jp2.add(jtfPostal);
95
96 //jp3
97 jp3.add(jlblContact);
98 jp3.add(jtfContact);
99 jp3.add(jrbResident);
100 jp3.add(jrbOffice);
101 jp3.add(jlblDOB);
102 jp3.add(jcDay);
103 jp3.add(jcMonth);
104 jp3.add(jcYear);
105
106 //jp4
107 jp4.add(jlblEmail);
108 jp4.add(jtfEmail);
109
110 //jp5
111 jp5.add(jlblPeriod);
112 jp5.add(jlblDeparture);
113 jp5.add(jcDay);
114 jp5.add(jcMonth);
115 jp5.add(jcYear);
116 jp5.add(jlblDays);
117 jp5.add(jcDay);
118
119 //jp6
120 jp6.add(jlblZone);
121 jp6.add(jrbAsia);
122 jp6.add(jrbWorldwide);
123 jp6.add(jlblPlan);
124 jp6.add(jrbDeluxe);
125 jp6.add(jrbClassic);
126
127 //jp7
128 jp7.add(jtfZone);
129
130 //jpCenterArea to hold jp1-jp7
131 jpCenterArea.add(jp1);
132 jpCenterArea.add(jp2);
133 jpCenterArea.add(jp3);
134 jpCenterArea.add(jp4);
135 jpCenterArea.add(jp5);
136 jpCenterArea.add(jp6);
137 jpCenterArea.add(jp7);
138
139 //jpBottom
140 jpBottom.add(jbtnSubmit);
141 jpBottom.add(jbtnCalculate);
142 jpBottom.add(jbtnClear);
143
144 /********Add Jpanels to JFrame*****/
145 add(jpTitle, BorderLayout.NORTH);
146 add(jpCenterArea, BorderLayout.CENTER);
147 add(jpBottom, BorderLayout.SOUTH);
148
149 setVisible(true);
150
151
152
153 }//end null constructor
154 public static void main(String[] args)
155 {
156 TravelInsuranceApplication travel = new TravelInsuranceApplication();
157
158 }//end main
159
160 }//end class
线程“main”java.lang.NullPointerException中的异常
位于java.awt.Container.addImpl
在java.awt.Container.add
在TravelInsuranceApplication.TravelInsuranceApplication.java:120>
在TravelInsuranceApplication.main
1导入javax.swing.*;
2导入java.awt.*;
3公共类旅行保险应用程序扩展JFrame
4 {
5//声明私有变量
6私人jlblTitle、jlblName、jlblNRIC、jlblAdd、jlblPostal、jlblContact、jlblDOB、7 jlblEmail、jlblPeriod;
8私人JLabel JLBL出发、jlblDays、jlblZone、jlblPlan;
9私人JTextField jtfName、jtfIC、jtfAdd、jtfPostal、jtfContact、jtfEmail、jtfZone;
10私人JRadioButton jrbResident、jrbOffice、jrbDeluxe、jrbClassic、jrbAsia、jrbWorldwide;
11私人按钮组BG联系人、bgZone、bgPlan;
12私人JComboBox jcDay,jcMonth,jcYear;
13私有JButton jbtnSubmit、jbtnCalculate、jbtnClear;
14私人JPanel jpTitle、jp1、jp2、jp3、jp4、jp5、jp6、jp7、jpBottom、jpCenterArea;
15字符串[]天={“1”、“2”、“3”};
16字符串[]月={“一月”、“二月”};
17字符串[]年={“1981”、“1985”、“1990”、“1995”};
18
19//构造函数和GUI开发
20公共旅行保险申请表()
21 {
22套(500200);
23 setTitle(“旅行保险申请”);
24设置默认关闭操作(JFrame.EXIT_ON_CLOSE);
25 setLayout(新的BorderLayout());
26
27//创建所有组件对象/
28 jlblTitle=新的JLabel(“旅行保险申请:”);
29 jlblName=新JLabel(“被保险人名称:”);
30 jlblNRIC=新JLabel(“NRIC:”);
31 jlblAdd=新JLabel(“地址:”);
32 jlblPostal=新的JLabel(“邮政编码:”);
33 jlblContact=新的JLabel(“电话:”);
34 jlblDOB=新的JLabel(“出生日期:”);
35 jlblEmail=新的JLabel(“电子邮件地址:”);
36 jlblPeriod=新JLabel(“保险期”);
37 JLBLDEVIATION=新JLabel(“离开日期”);
38 jlblDays=新JLabel(“投保天数”);
39 jlblZone=新JLabel(“区域:”);
40 jlblPlan=新的JLabel(“计划:”);
41
42 jtfName=新的JTextField(50);
43 jtfIC=新的JTextField(15);
44 jtfAdd=新的JTextField(50);
45 jtfPostal=新的JTextField(15);
46 jtfContact=新的JTextField(15);
47 jtfEmail=新的JTextField(50);
48 jtfZone=新的JTextField(100);
49
50 jrbResident=新的JRadioButton(“rsident/Pgr”);
51 jrbOffice=新的JRadioButton(“办公室/HP”);
52 jrbAsia=新JRadioButton(“亚洲”);
53 jrbAsia=新JRadioButton(“全球”);
54 jrbDeluxe=新的JRadioButton(“豪华”);
55 jrbClassic=新的JRadioButton(“经典”);
56
57 jcDay=新JComboBox(天);
58 JCMOUNT=新JCOMBOX(月);
59 jcYear=新JCOMBOX(年);
60
61 jbtnSubmit=新JButton(“提交”);
62 jbtnCalculate=新JButton(“计算”);
63 jbtnClear=新的JButton(“Clear”);
64
65/****为所有JP板创建JP板-jpTitle、JpCenterArea和jp2-jp8、jpBottom+setLayout 66******/
67 jpTitle=新JPanel(新FlowLayout(FlowLayout.CENTER));
68 jpCenterArea=新的JPanel(新的FlowLayout());
69 jp1=新的JPanel(新的FlowLayout());
70 jp2=新JPanel(新FlowLayout(FlowLayout.CENTER));
71 jp3=新的JPanel(新的FlowLayout());
72 jp4=新的JPanel(新的FlowLayout());
73 jp5=新的JPanel(新的FlowLayout());
74 jp6=新JPanel(新FlowLayout(FlowLayout.CENTER));
75 jp7=新JPanel(新FlowLayout(FlowLayout.CENTER));
76 jpBottom=新的JPanel(新的FlowLayout(FlowLayout.CENTER));
77
78
79
80
81//将组件添加到JPanel
82 jpTitle.add(jlblTitle);
83
84//jp1
85 jp1.add(jlblName);
86 jp1.add(jtfName);
87 jp1.add(jlblNRIC);
88 jp1.add(jtfIC);
89
90//jp2
91 jp2.add(jlblAdd);
92 jp2.add(jtfAdd);
93 jp2.add(JLBL邮政);
94 jp2.add(jtfPostal);
95
96//jp3
97 jp3.add(jlblContact);
98 jp3.add(jtfContact);
99 jp3.add(jrbResident);
100 jp3.add(jrbOffice);
101 jp3.add(jlblDOB);
102 jp3.add(jcDay);
103 jp3.add(每月);
104 jp3.add(年度);
105
106//jp4
107 jp4.增补(jlblEmail);
108 jp4.add(jtfEmail);
109
110//jp5
111 jp5.add(jlbl期);
112 jp5.增补(JLBL);
113 jp5.add(jcDay);
114 jp5.add(每月);
115 jp5.add(年度);
116 jp5.add(jlbl天);
117 jp5.add(jcDay);
118
119//jp6
120 jp6.add(jlblZone);
121 jp6.增补(jrbAsia);
122 jp6.add(jrbWorldwide);
123 jp6.增补(jlblPlan);
124 jp6.add(jrbDeluxe);
125 jp6.add(jrbClassic);
126
127//jp7
128 jp7.add(jtfZone);
129
130//JP中心区域容纳jp1-jp7
131 jpcentera.add(jp1);
132 jpCenterArea.add(jp2);
133 JP中心区域。添加(jp3);
134 jpCenterArea.add(jp4);
135 JP中心区域。添加(jp5);
136 jpCenterArea.add(jp6);
137 JP中心区域。添加(jp7);
138
139//jp下
140 jpBottom.add(jbtnSubmit);
141 jpBottom.add(jbtnCalculate);
142 jpBottom.add(jbtnClear);
143
144/*******将JPanel添加到JFrame*****/
145增补(jpTitle,BorderLayout.NORTH);
146添加(jpCenterArea,BorderLayout.CENTER);
147添加(JP底部,边界布局。南部);
148
149设置可见(真);
150
151
152
153}//结束空构造函数
154公共静态void main(字符串[]args)
155 {
156 TravelInsuranceApplication travel=新的TravelInsuranceApplication();
157
158}//端干管
159
160}//结束类
您尚未初始化jrbWorldwide,而是两次分配给jrbAsia:
jrbAsia = new JRadioButton("Asia");
jrbAsia = new JRadioButton("Worldwide");
您尚未初始化jrbWorldwide,而是两次分配给jrbAsia:
jrbAsia = new JRadioButton("Asia");
jrbAsia = new JRadioButton("Worldwide");
除了修复jrbWorldwide问题之外,我还做了一些补充。先声明变量,然后再初始化它们。在一条线上完成这一切。例如:
JRadioButton jrbAsia = new JRadioButton("example");
其次,这些项目中的许多不需要单独的变量。例如,而不是:
jlblAdd = new JLabel("Address:");
jp2.add(jlblAdd)
只要做:
jp2.add(new JLabel("Address:"))
这些更改不仅可以节省您的时间和空间,还可以节省大量的时间和空间