gpt4 book ai didi

java 程序变得无响应

转载 作者:行者123 更新时间:2023-12-02 04:53:36 25 4
gpt4 key购买 nike

在我的语音识别项目中有两个程序,一个用于逻辑 ( full program ),另一个用于 GUI ( full program )。

在 GUI 程序中,我添加了以下几行:

JButton btnNewButton = new JButton("Start Recognizing");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
state.setText("Listening");
System.out.println("Started Listening");
state.setBackground(new Color(51, 204, 0));

// Object to use from another program
HelloWorld obj = new HelloWorld();
obj.main(args);
}
});
btnNewButton.setBounds(10, 11, 156, 49);
frame.getContentPane().add(btnNewButton);

JButton btnNewButton_1 = new JButton("Stop Recognizing");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
state.setText("Not listening");
state.setBackground(new Color(204, 0, 51));
System.out.println("Stopped Listening");
// Stop the obj.main method.
}
});

现在,当我运行该程序时,它会显示 GUI。但是当我单击开始按钮时,它变得没有响应并继续监听语音。甚至 GUI 的关闭按钮也不起作用。我该怎么做才能使其响应,以及如何停止它?

最佳答案

您遇到了一个经典的 Swing 线程问题,并且您的解决方案与所有其他解决方案相同:使用 SwingWorker 或其他后台线程来执行长时间运行的代码,以便不会在 Swing 事件线程中调用它。有关我的代码示例,请查看此 search result 。有关教程,请查看 Concurrency in Swing 。但最重要的是,如果您使用 SwingWorker,则必须从其 doInBackground() 方法调用长时间运行的代码。除了 repaint() 之外,不应从该方法内调用任何 Swing 调用。如果在查看教程和链接后您仍然遇到麻烦,那么请考虑在您的问题的编辑中创建和发布一个最小的示例程序,一个 mcve ,一个小程序,可以编译、运行并向我们显示您的问题,并且不需要外部库。如果您这样做,那么我可以向您展示特定于您的问题的代码。

您还遇到了与 btnNewButton.setBounds(10, 11, 156, 49); 无关的问题。您几乎不想使用 null 布局和 setBounds,因为它会导致僵化的 GUI,在一个平台上看起来不错,但在所有其他平台上看起来很糟糕,并且很难尝试调试、增强或修改。相反,您需要了解并使用布局管理器。

关于java 程序变得无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com