Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程中的java异常";“主要”;java.lang.NullPointerException错误_Java - Fatal编程技术网

线程中的java异常";“主要”;java.lang.NullPointerException错误

线程中的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

我想使用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 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循环的下方

哦!哈哈谢谢您的帮助我还有一个问题,您能帮忙吗?哦!哈哈谢谢您的帮助我还有一个问题,您能帮忙吗?这回答了您的问题吗我还有一个问题,你能帮忙吗?我还有一个问题,你能帮忙吗?