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 に答える