【发布时间】:2013-04-24 20:10:29
【问题描述】:
好吧,这可能很简单,但我就是不明白。
package foo.foo.foo;
public class Vars {
public static boolean foo = false;
}
好的,这就是我的 Vars 课程。
然后我有一个 JFrame,带有一个 JMenuBar、JMenu 和一个 JMenuItems。
items = new JCheckBoxMenuItem("Foo");
items.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AbstractButton ab = (AbstractButton)e.getSource();
Vars.foo = ab.getModel().isSelected();
System.out.println(Vars.foo);
}
});
menu.add(items, 0);
menuBar.add(menu,0);
一切都很好,它为 println 返回 true。
现在,这是实际的问题部分......
我有一个 if 语句
if(Vars.foo)
这 - 应该 - 工作,对吧?它从不执行 if 括号内的代码,除非我在它上面添加这行代码。
System.out.println(Vars.foo);
这自然打印为 true,然后 if 语句有效,但如果我注释掉该行,它就不起作用。
我也一直在谷歌搜索,并尝试过这个:
Vars v = null;
if(v.yoo)
除非我有 println,否则它仍然不会这样做,我不知道为什么 println 使它工作。你能解释一下为什么/如何工作吗?
编辑:
public class painthandling implements Runnable {
@Override
public void run() {
Vars y = null;
while(true){
if(y.foo){
//some code here
}
System.out.println(y.foo);
}
}
}
这是不工作的部分,if 语句。总是返回 false。
frame f = new frame();
(new Thread(new painthandling())).start();
System.out.print("Got it.");
JFrame 部分在新框架中被调用,然后另一个类在那里被调用,Vars 类在两者中被调用。在painthandling()中,if语句如果没有println则返回false。
【问题讨论】:
-
你能贴出你说不起作用的代码吗?
-
你的问题的继承部分在哪里?
-
我仍然看不到继承...无论如何,为什么字段首先是静态的?让(可能)多个线程访问静态字段似乎是一个非常的坏主意。
-
你怎么知道代码没有被执行?更有可能它正在运行而你没有意识到它
-
如果我没有把它当作静态的,它就会出错,到处都是。我试过使它成为非静态的,并做 Vars v = null; v.foo,但我得到了相同的结果至于运行,我有 printlns 没有被解雇。
标签: java oop inheritance static field