passport_pengxing
2009-05-14 00:29
浏览 215
已采纳

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类中变量的变化呢?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • iteye_14985 2009-05-14 11:28
    已采纳

    这是个比较典型的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]

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题