Java JFrame访问进度条

标签 java jframe

我需要从另一个包/类访问我的 JProgressBar 对象,我正在尝试以下操作

GUI类

public class gui {

    private JProgressBar progress;

    private JFrame gui;

    public void updateBar(int value) {

        this.progress.setValue(this.progress.getValue() + value);
    }

    public void startGui() {

        // Set title, size and layout

        gui = new JFrame("Java updater");
        gui.setSize(new Dimension(500, 500));
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setResizable(false);
        gui.setLayout(new FlowLayout());

        // Add elements

        elements graphics = new elements(gui);  
        this.progress = graphics.addBar(0);

        gui.setVisible(true);
    }
}

这目前有效,并且正在添加进度条,但现在我需要从另一个类访问它,以便我可以更改它的值。

我创建了 updateBar 函数,但这是我的问题,在我的其他类(class)上,我执行以下操作

public class updater {

    private String domain;

    private gui bar;

    public updater() {

        this.bar = new gui();
    }

    public void updateStartup(String domain) throws MalformedURLException {

        this.domain = domain;
        URL url = new URL(this.domain);

        try {

            BufferedReader read = new BufferedReader(new InputStreamReader(url.openStream()));
            String f = read.readLine();
            System.out.println(f);
            bar.updateBar(5);

        } catch (IOException e) {

        }
    }
}

我调用 bar.updateBar(5) 没有成功,出现错误。

Exception in thread "main" java.lang.NullPointerException
    at com.raggaer.gui.gui.updateBar(gui.java:17)
    at com.raggaer.updater.updater.updateStartup(updater.java:32)
    at com.raggaer.main.startup.<init>(startup.java:22)
    at com.raggaer.main.main.main(main.java:17)

最佳答案

您遇到的问题是,在新代码中,您永远不会在新创建的 gui 类实例上调用 startGui() 方法。因此,该类中的 private JProgressBar Progress; 字段保持为空。

您可以这样写作为快速修复:

private JProgressBar progress = new JProgressBar();

或者只是将 startGui 中的所有代码放入 gui 类的构造函数中,并删除 startGui 方法。

另外,我想指出的是,您应该使用 SwingUtilities.invokeAndWaitSwingUtilities.invokeLater 来调用 bar.updateBar(5); 因为在 Swing 中,必须在事件调度线程中对 UI 元素进行更新(请查看 SwingUtilities.invokeLater 文档)。

关于Java JFrame访问进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23273313/

相关文章:

java - 为什么从 CMD 运行 JAR 文件时收到 NoClassDefFoundError?

java - Android:SimpleDateFormat 给出 API 错误

java - JFrame 调用正在打开两个 JFrame

Java Swing 绘制矩形

java - 当 servlet 请求到来时加载早期创建的对象

java - Android 保存/重写文件到 SD 卡

java - Play Framework : redirect to a different domain

java - 从按钮单击事件打开另一个 JFrame

java - 如何实时调整Java动画?

java - 是否可以判断 jframe 是否位于另一个窗口后面