java GUI帮助-主线程中有错误

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

基本上我想用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, 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:"))
这些更改不仅可以节省您的时间和空间,还可以节省大量的时间和空间