JavaFx Main中怎么绑定Java类中的一个static变量呢?

最近遇到一个很烦的问题,搞了很久搞不定,想请各位帮忙,看看有没有解决的办法,我建了个JavaFx应用程序,Main里面要监测一个Java线程中的一个变量的变化,并把变化呈现出来,我搞了很久也没搞定...

[code="java"]
var output = Group {
content: Text{
x : 550
y : 143
content: bind OutputInfo.getIntance().outputInfo
font:Font{
size:30
}

}

}
[/code]
这是Main.fx里面的一小段代码,里面的content内容是绑定到另一个类中的变量

[code="java"]
public class OutputInfo {

public String outputInfo;
private static OutputInfo outputInstance = new OutputInfo("Output:");

OutputInfo(String outputInfo){
    this.outputInfo = outputInfo;
}

public static OutputInfo getIntance() {
    return outputInstance;
}

}
[/code]
这里就是需要监测的变量outputInfo

我有一个线程,在运行之中把outputInfo改变了
[code="java"]
public void run() {
DBSession db1 = new DBSession();
DBSession db2 = new DBSession();

    //设置隔离级别 1为   TRANSACTION_READ_UNCOMMITTED 2为 TRANSACTION_READ_COMMITTED 4为 TRANSACTION_REPEATABLE_READ 8为  TRANSACTION_SERIALIZABLE
    db1.setIsolationLevel(value);
    db2.setIsolationLevel(value);

    db1.setIsAutoCommit(false);
    db2.setIsAutoCommit(false);

    String sql1 = "UPDATE example SET VALUE=2 WHERE id=1";
    String sql2 = "UPDATE example SET VALUE=1 WHERE id=2";
    String sql3 = "UPDATE example SET VALUE=2 WHERE id=2";
    String sql4 = "UPDATE example SET VALUE=1 WHERE id=1";

    OutputInfo.getIntance().outputInfo = db1.executeUpdate(sql1);

    OutputInfo.getIntance().outputInfo = db2.executeUpdate(sql2);

    OutputInfo.getIntance().outputInfo = db1.executeUpdate(sql3);

    OutputInfo.getIntance().outputInfo = db2.executeUpdate(sql4);

    db1.rollback();
    db2.rollback();
    db1.close();
    db2.close();

[/code]

我这上面的executeUpdate方法会返回操作是否成功的信息,并把信息赋给OutputInfo中的outputInfo

我自己感觉我应该写的没错,但是为什么不起作用呢,有没有那个大牛帮忙解决一下困惑,感激不尽!

不一定非要按照我的思路来想办法,其他的办法也行,总之,JavaFx中怎么监测Java类中变量的变化呢?

这是个比较典型的JavaFX和Java互操作的问题,可以参考本人文章: [url=http://javafxguy.iteye.com/blog/317087]JavaFX和Java之间的互操作性[/url]。

基本原则是,bind仅限于JavaFX类,对Java类无效。要解决你的问题,可以这么做:

定义一个Java的interface类 JavaInterface.java :
[code="java"]
public interface JavaInterface {
public void doUpdate(String s);
}
[/code]

写一个JavaFX类UpdateClass.fx实现这个interface,如下:
[code="java"]
/*

  • UpdateClass.fx *
  • @author Henry Zhang */ public var updatedContent: String = "defaultValue";

public class UpdateClass extends JavaInterface {

public override function doUpdate( s: String): Void {
updatedContent = s;
}
}
[/code]

在OutputInfo.java中增加一句声明:
[code="java"]
public static JavaInterface javafxObject ;
[/code]

在Main.fx中,可以这样写:
[code="java"]

OutputInfo.javafxObject = UpdateClass {};

var output = Group {
content: Text{
x : 550

y : 143

content: bind UpdateClass.updatedContent;
font:Font{
size:30
}
}
}
[/code]

最后,在你的run()方法中增加相应的通知功能,如:
[code="java"]
. . . . . .

String result = db1.executeUpdate(sql1);

OutputInfo.javafxObject.doUpdate( result );

result = db1.executeUpdate(sql2);

OutputInfo.javafxObject.doUpdate( result );

. . . . . .
[/code]

希望对你有帮助。更多JavaFX的信息可以可以参考:[url=http://javafxguy.iteye.com]JavaFX Guy博客[/url]
[url=http://www.javafxblogs.com]JavaFX技术应用交流[/url]