如何检查此复选框是否从Java中的其他方法启用?

如何检查此复选框是否从Java中的其他方法启用?,java,swing,checkbox,Java,Swing,Checkbox,我试图做的是检查是否从另一个线程上运行的另一个方法启用了复选框。我对Java相当陌生,所以如果我的代码不是Java通常的编写方式(或者如果它写得不好),我会用advanced道歉 所以我创建了一个方法,创建了一个iframe,然后在其中添加了一个复选框。我删除了创建jframe的部分,只是为了使代码保持最少—您可以在下面看到它: private void initialize() { chckbxEnabled.setHorizontalAlignment(SwingConstants.

我试图做的是检查是否从另一个线程上运行的另一个方法启用了复选框。我对Java相当陌生,所以如果我的代码不是Java通常的编写方式(或者如果它写得不好),我会用advanced道歉

所以我创建了一个方法,创建了一个iframe,然后在其中添加了一个复选框。我删除了创建jframe的部分,只是为了使代码保持最少—您可以在下面看到它:

private void initialize() {
    chckbxEnabled.setHorizontalAlignment(SwingConstants.LEFT);
    chckbxEnabled.setForeground(Color.WHITE);
    chckbxEnabled.setBounds(98, 123, 81, 23);
    frame.getContentPane().add(chckbxEnabled);
}
然后,我在一个新线程中创建了一个新方法,并从另一个方法调用它,我在这里没有展示

static Thread thread = new Thread(new Runnable() {
public void getPing() throws IOException, InterruptedException {
    while (true) {
        System.out.println(chckbxEnabled.isEnabled());
        if(chckbxEnabled.isEnabled()) {] // Part I am having trouble with
            String apiKey = "exmapleApiKey";
            URL url = new URL("http://example.com/ping.php?mode=get&apikey="+apiKey);
            URLConnection yc = url.openConnection();
            BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                    yc.getInputStream()));
            String inputLine;
            inputLine = in.readLine();
            }
        Thread.sleep(1000);
    }
}
   public void run() {     
       try {
            getPing();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
       }
    });
}
如您所见,我正在尝试访问
chckbxEnabled.isEnabled()
。这是有效的,因为在我创建主类之后,我添加了
private static JCheckBox chckbxEnabled=new JCheckBox(“Enabled”)。因此我可以访问它,但当我打印它时,它总是返回
true
,即使有时选中了复选框


因此,我的问题是,我认为我尝试过的方法是“混乱”的,而不是应该采用的方法,那么什么是更好的方法呢

用于检查用户是否可以与用户交互(考虑灰显元素)

是您要查找的内容(选中框内的复选标记)。您可能想看看()

另外:请记住,只能从gui线程绘制api


更新: 因此:大多数gui框架只允许一个线程绘制gui,因为同步非常复杂。因此,大多数swing都不是线程安全的。可以找到一个很好的答案来概括这一点(实际上与swing相关)

:

关于线程安全性的一个注意事项:这么重要的 Java平台的一部分不是线程安全的。事实证明,任何 尝试创建线程安全的GUI库面临一些基本问题 问题。有关此问题的更多信息,请参阅Graham中的以下条目 汉密尔顿的博客:多线程工具包:一个失败的梦想

鉴于我们必须从单个线程绘制gui,这意味着什么? 更新操作(即更改标签文本)不应从生成的线程执行,而应从运行gui代码的主线程执行(在swing中称为()。 可以找到一个关于如何让工作线程更新gui的教程,即,基本思想是让backgound线程进行计算并返回结果。这方面有很多帮助。gui thred随后将更新gui


concurreny和swing的介绍如下:

您正在混合各种方法:

用于检查用户是否可以与用户交互(考虑灰显元素)

是您要查找的内容(选中框内的复选标记)。您可能需要查看()

另外:请记住,只能从gui线程绘制api


更新: 所以:大多数gui框架只允许一个线程绘制gui,因为同步非常复杂。因此大多数swing都不是线程安全的。可以找到一个很好的答案来概括这一点(实际上与swing相关)

:

关于线程安全性的一个注意事项:这么重要的 Java平台的一部分不是线程安全的 尝试创建线程安全的GUI库面临一些基本问题 有关此问题的更多信息,请参阅Graham中的以下条目 汉密尔顿的博客:多线程工具包:一个失败的梦想

鉴于我们必须从单个线程绘制gui,这意味着什么? 更新操作(即更改标签文本)不应从生成的线程执行,而应从运行gui代码的主线程执行(在swing中称为()。 可以找到一个关于如何让工作线程更新gui的教程,即,基本思想是让backgound线程进行计算并返回结果。这方面有很多帮助。gui thred随后将更新gui


concurreny和swing的介绍如下:

isSelected()
isEnabled()
是正确的,因为您没有禁用它it@FastSnail你是什么意思?当我禁用复选框时,它被禁用了,不是吗?:)你是如何去除它的?通过取消选中???
isSelected()
isEnabled()
为true,因为您尚未禁用it@FastSnail你是什么意思?当我禁用复选框时,它被禁用了,不是吗?:)你是如何去除它的?通过取消选中??谢谢。我觉得自己真的很愚蠢,但这起作用了。您能否解释一下,您所说的只能从GUI线程绘制API是什么意思?正如我所说,我是Java新手,如果您能给我解释一下,我将不胜感激。谢谢:)非常感谢。这真的很有用。我感谢你的帮助!非常感谢。我觉得自己真的很愚蠢,但这起作用了。您能否解释一下,您所说的只能从GUI线程绘制API是什么意思?正如我所说,我是Java新手,如果您能给我解释一下,我将不胜感激。谢谢:)非常感谢。这真的很有用。我感谢你的帮助!