我需要从另一个包/类访问我的 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.invokeAndWait
或 SwingUtilities.invokeLater
来调用 bar.updateBar(5);
因为在 Swing 中,必须在事件调度线程中对 UI 元素进行更新(请查看 SwingUtilities.invokeLater 文档)。
关于Java JFrame访问进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23273313/