java.util.MissingResourceException : Couldn't find 3-letter country code for CS

标签 java swing jcombobox country-codes

我得到异常:

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();
    }
}

请帮我修复异常。

最佳答案

基本上它所在的语言环境似乎没有 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 Docs了解更多。

关于java.util.MissingResourceException : Couldn't find 3-letter country code for CS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13612710/

相关文章:

java - Swing - 使用 getComponent() 更新所有 JButton

java - 处理内存制作Swing动画

java - for循环中更新JLabel的问题

java - 使用保存值的​​对象创建 JComboBox

java - 在另一个方法的构造函数中初始化最终变量

Java:为什么我不能使用 BufferedReader 将分隔字符串写入文件?

java - Java、PHP 中的 AES 128 加密 - 输出差异

java - 为什么这个精度失败的示例显示为 double 而不是 float ?

java - Sqlite 列确定错误

java - JTable:如何使 JComboBox 单元格渲染器比渲染的单元格更大?