Java:在Windows上获取已安装的文本输入语言
我试图从Java应用程序中找出Windows上安装的输入语言。您可以从控制面板->区域和语言->更改键盘(按钮)->常规->已安装服务(底部面板)中手动解决此问题 背景是,在应用程序中,我使用以下调用强制Locale.US-Java:在Windows上获取已安装的文本输入语言,java,Java,我试图从Java应用程序中找出Windows上安装的输入语言。您可以从控制面板->区域和语言->更改键盘(按钮)->常规->已安装服务(底部面板)中手动解决此问题 背景是,在应用程序中,我使用以下调用强制Locale.US- Component component = getAWTComponent(); component.getInputContext().selectInputMethod(Locale.US) 但在一些主机上并没有安装美国键盘语言(比如英国的一个系统)。我想确认该语
Component component = getAWTComponent();
component.getInputContext().selectInputMethod(Locale.US)
但在一些主机上并没有安装美国键盘语言(比如英国的一个系统)。我想确认该语言不可用,并抛出一个错误或其他东西
另外,是否可以从Java安装此类服务(可能有些牵强)?Java可以找到您的默认字符集: 然后,您可以在扫描仪中使用它以UniCode格式转换输入字符集:
Scanner scan = null;
final void defineScan(Charset charsetCanBeNull) {
scan = new Scanner(System.in, (null == charsetCanBeNull)
? charset
: charsetCanBeNull);
}
然后您可以使用Scanner.methods(..)Java可以找到您的默认字符集: 然后,您可以在扫描仪中使用它以UniCode格式转换输入字符集:
Scanner scan = null;
final void defineScan(Charset charsetCanBeNull) {
scan = new Scanner(System.in, (null == charsetCanBeNull)
? charset
: charsetCanBeNull);
}
然后你可以使用Scanner.methods(..)破坏默认键盘布局是必须非常小心的事情。如果你这么做了,你应该给用户一个选择他们想要的布局的选项,而不是强迫每个人都使用某个布局 想象一下,如果我写了一个应用程序,试图强迫你使用德语键盘,你会有什么反应 也就是说,当
Locale.US
不可用时,API将返回到有效的键盘布局。执行该操作的代码隐藏在
使用反射,您应该能够复制代码中检查某个区域设置是否受支持的部分。要想搞乱默认键盘布局,必须非常小心。如果你这么做了,你应该给用户一个选择他们想要的布局的选项,而不是强迫每个人都使用某个布局 想象一下,如果我写了一个应用程序,试图强迫你使用德语键盘,你会有什么反应 也就是说,当
Locale.US
不可用时,API将返回到有效的键盘布局。执行该操作的代码隐藏在
使用反射,您应该能够复制代码中检查某个区域设置是否受支持的部分。获取对您有用的
default
区域设置吗?当然,这可以通过java来实现。@vikingsteve不幸的是,没有。另外(如果我在这里错了,请纠正我)java中存在区域设置并不意味着系统上安装了相应的输入服务。好的,这同样适用于GetAvailableCales
(根据user2504380的回答)获取默认值
区域设置对您有用吗?当然,这可以通过java来实现。@vikingsteve不幸的是,没有。另外(如果我在这里错了,请纠正我)java中存在区域设置并不意味着系统上安装了相应的输入服务。好的,这同样适用于GetAvailableCales
(根据user2504380的回答)正如对@vikingsteve所提到的,这不会有用。我认为这将返回Java支持的区域设置列表。与安装的文本输入语言无关。如@vikingsteve所述,这没有任何用处。我认为这将返回Java支持的区域设置列表。不必对安装的文本输入语言执行任何操作。很抱歉,我不确定我是否理解。它将返回一个正在使用的字符集。这对我想要实现的目标有什么帮助?@Aarondigula我说的是问题的第一部分:我试图从Java应用程序中找出Windows上安装的输入语言。
这有助于找到使用的键盘“输入语言”指的是“键盘布局”。它与区域设置完全无关(您可以使用区域设置来查找键盘布局)。但是Java知道的区域设置与操作系统安装的键盘布局无关。很抱歉,我不确定我是否理解。它将返回一个正在使用的字符集。这对我想要实现的目标有什么帮助?@Aarondigula我说的是问题的第一部分:我试图从Java应用程序中找出Windows上安装的输入语言。
这有助于找到使用的键盘“输入语言”指的是“键盘布局”。它与区域设置完全无关(您可以使用区域设置来查找键盘布局)。但是Java知道的区域设置与操作系统安装的键盘布局无关。谢谢Aaron。这看起来很有希望。我想试试。我也接受你对改变地区的担心。但我正在使用的应用程序仅用于内部目的,用于测试我们开发的其他一些应用程序。所以我可以承受风险-:)谢谢亚伦。这看起来很有希望。我想试试。我也接受你对改变地区的担心。但我正在使用的应用程序仅用于内部目的,用于测试我们开发的其他一些应用程序。所以我可以承受风险-:)
static public void main(String[]args) {
Locale al[] = DateFormat.getAvailableLocales();
for (Locale l : al) {
System.out.println(l);
}
}