4

我得到了例外:

Exception in thread "AWT-EventQueue-0" java.util.MissingResourceException: Couldn't find 3-letter country code for CS
    at java.util.Locale.getISO3Country(Locale.java:1521)
    at Business.CountryList.CountryList(CountryList.java:29)

我这样调用函数:

countryJComboBox.removeAllItems();
countryJComboBox.addItem(CountryList.CountryList(new String[0]));

CountryList 类如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Business;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;

/**
 *
 * @author Vivek
 */
public class CountryList {
    public static Country CountryList(String[] args) {
        List<Country> countries = new ArrayList<>();

        Locale[] locales = Locale.getAvailableLocales();
        for (Locale locale : locales) {
            String iso = locale.getISO3Country();
            String code = locale.getCountry();
            String name = locale.getDisplayCountry();

            if (!"".equals(iso) && !"".equals(code) && !"".equals(name)) {
                countries.add(new Country(iso, code, name));
            }
        }
        Collections.sort(countries, new CountryComparator());
        Country returnCountry = null;
        for (Country country : countries) {
            returnCountry = country;
        }
        return returnCountry;
    }
}

class CountryComparator implements Comparator<Country> {
    private Comparator comparator;
    CountryComparator() {
        comparator = Collator.getInstance();
    }

    @Override
    public int compare(Country o1, Country o2) {
        return comparator.compare(o1.name, o2.name);
    }
}

class Country {
    private String iso;
    private String code;
    public String name;
    Country(String iso, String code, String name) {
        this.iso = iso;
        this.code = code;
        this.name = name;
    }

    @Override
    public String toString() {
        return iso + " - " + code + " - " + name.toUpperCase();
    }
}

请帮我修复异常。

4

2 回答 2

6

基本上,它所在的语言环境似乎没有 3 个字母的国家代码。由于您试图忽略无论如何都没有 3 个字母 iso 代码的国家/地区:

for (Locale locale : locales) {
   try {
     String iso = locale.getISO3Country();
     String code = locale.getCountry();
     String name = locale.getDisplayCountry();
     if (!"".equals(iso) && !"".equals(code) && !"".equals(name)) {
        countries.add(new Country(iso, code, name));
     }
   catch (MissingResourceException e){
     //do nothing
   }
}

有关更多信息,请参阅Java 文档

于 2012-11-28T19:23:40.933 回答
0

看,对我来说,那条线上的国家似乎没有被宣布......

for (Country country : countries) {
        returnCountry = country;

只需声明该变量...可以吗?

于 2018-04-29T18:19:00.727 回答