线程中的java异常";“主要”;java.lang.NullPointerException错误
我想使用GUI将标志显示为按钮 但是,我的代码不起作用,预期的输出应该是这样的 旗帜的图像保存在同一个文件中,文件名为“USA.png”、“西班牙.png”等 这就是我现在的代码线程中的java异常";“主要”;java.lang.NullPointerException错误,java,Java,我想使用GUI将标志显示为按钮 但是,我的代码不起作用,预期的输出应该是这样的 旗帜的图像保存在同一个文件中,文件名为“USA.png”、“西班牙.png”等 这就是我现在的代码 import java.util.*; import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; class Olympic { private int NO; private Str
import java.util.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Olympic
{
private int NO;
private String country;
private double[] score;
private int rank;
public Olympic(String country)
{
this.country = country;
}
public Olympic (Olympic oly)
{
this(oly.country);
}
public int getRank()
{
return rank;
}
public String getName()
{
return country;
}
}
class OlympicFrame extends JFrame
{
private JButton[] jbArray = new JButton[12];
private final String[] countryArray = {"USA", "Spain", "China", "Japan", "Italy", "Germany",
"France", "Brazil", "Netherland", "Poland", "Russia", "Ukraine"};
private ArrayList<Olympic> alist = new ArrayList <Olympic> ();
//private JLabel rank = new JLabel();
public OlympicFrame()
{
super ("Olympic 2020");
setLayout (new GridLayout (4, 3));
constructAList();
for (int i = 0; i<jbArray.length; i++)
{
getContentPane().add(jbArray[i]);
}
jbArray = new JButton [countryArray.length];
for (int i = 0; i<jbArray.length; i++)
{
jbArray[i] = new JButton(alist.get(i).getName());
ImageIcon ic = new ImageIcon (alist.get(i).getName() +".png");
jbArray[i].setIcon(ic);
}
}
private void constructAList()
{
for (int i = 0; i<countryArray.length; i++)
{
alist.add(new Olympic(countryArray[i]));
}
}
}
class aaa
{
public static void main (String [] args)
{
OlympicFrame of = new OlympicFrame();
of.setSize (300, 100);
of.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
of.setVisible (true);
}
}
import java.util.*;
导入java.lang.*;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
奥运会级别
{
私人互联网号码;
私人国家;
私人双[]分;
私有整数秩;
公共奥运会(弦乐国家)
{
这个国家=国家;
}
公共奥运会(奥运会)
{
这个国家;
}
public int getRank()
{
返回等级;
}
公共字符串getName()
{
返回国;
}
}
类OlympicFrame扩展了JFrame
{
私有JButton[]jbArray=新JButton[12];
私有最终字符串[]countryArray={“美国”、“西班牙”、“中国”、“日本”、“意大利”、“德国”,
“法国”、“巴西”、“荷兰”、“波兰”、“俄罗斯”、“乌克兰”};
private ArrayList alist=new ArrayList();
//私有JLabel秩=新JLabel();
公共奥林匹克框架()
{
超级(“2020年奥运会”);
setLayout(新的GridLayout(4,3));
建构主义者();
对于(int i=0;i而言,问题在于您的代码顺序在初始化按钮之前已将其添加到contentpane,请按如下所示进行更改:
jbArray = new JButton [countryArray.length];
for (int i = 0; i<jbArray.length; i++)
{
jbArray[i] = new JButton(alist.get(i).getName());
ImageIcon ic = new ImageIcon (alist.get(i).getName() +".png");
jbArray[i].setIcon(ic);
}
for (int i = 0; i< jbArray.length; i++)
{
getContentPane().add(jbArray[i]);
}
jbArray=newjbutton[countryArray.length];
对于(int i=0;i而言,问题在于您的代码顺序在初始化按钮之前已将其添加到contentpane,请按如下所示进行更改:
jbArray = new JButton [countryArray.length];
for (int i = 0; i<jbArray.length; i++)
{
jbArray[i] = new JButton(alist.get(i).getName());
ImageIcon ic = new ImageIcon (alist.get(i).getName() +".png");
jbArray[i].setIcon(ic);
}
for (int i = 0; i< jbArray.length; i++)
{
getContentPane().add(jbArray[i]);
}
jbArray=newjbutton[countryArray.length];
for(int i=0;i您的jbArray[i]
正在第66行赋值,但您试图在第58行访问它。您需要将第一个for循环移到第二个for循环下方
正在第66行分配,但您正试图在第58行访问它。您需要将第一个for循环移动到第二个for循环的下方哦!哈哈谢谢您的帮助我还有一个问题,您能帮忙吗?哦!哈哈谢谢您的帮助我还有一个问题,您能帮忙吗?这回答了您的问题吗我还有一个问题,你能帮忙吗?我还有一个问题,你能帮忙吗?