javafx SimpleIntegerProperty get()不返回设置值

时间:2017-03-18 17:07:25

标签: javafx properties thread-safety

我正在调查一个奇怪的情况,即JavaFX的SimpleIntegerProperty不时会返回正确的值。我已经google了很多,但没有发现任何关于这个问题的暗示。我知道这些属性不是线程安全的,但在这种情况下,同一个线程正在执行set()和get()方法,这些方法可以在下面的代码中看到。

有一个模型类"客户"其中SimpleIntegerProperty是一个成员变量:

public class Customer {

private  SimpleIntegerProperty adr_nr = new SimpleIntegerProperty();



private void queryDataFromDatabase(int adr_nr, Connection connection) throws AdrNrNotFoundException{

    Connection con = connection;

    Statement stmt = null;
    ResultSet rs = null;
    String sadr_nr = String.valueOf(adr_nr);

    try{

        String sqlgrunddat = "select adr_nr, adr_name1, adr_name2"
                + " from customer"
                + " where adr_nr="+sadr_nr;


        stmt = con.createStatement();
        rs = stmt.executeQuery(sqlgrunddat);



        while(rs.next()){

            this.adr_nr.set(rs.getInt(1));


        }

        rs.close();
        stmt.close();

        if (this.adr_nr.get()<1){

            throw new AdrNrNotFoundException();

        }


    }
    catch (SQLException e){

        e.printStackTrace();

    }
}
}

间歇性发生的问题是,尽管AdrNrNotFoundException返回了正确的整数值并且之前已成功设置了属性,但ResultSet被抛出。因此,当我在抛出异常之前设置断点时,我可以看到我的SimpleIntegerProperty adr_nr具有正确的值(例如20532)。

看起来adr_nr.get()方法间歇性地返回0 - 否则if将返回false。正如我所说,线程安全的问题在这种情况下不应该是问题,因为属性的set()get()方法是在同一个线程上运行的同一个方法中调用的。

更改代码
        if (this.adr_nr.get()<1){

            throw new AdrNrNotFoundException();

        }

        if (this.adr_nr.get()==0){

            throw new AdrNrNotFoundException();

        }

并没有改变这种情况。

如果我使用原始int作为解决方法,则问题不会发生。我正在使用JDK 8更新121.

希望有人有想法......

提前致谢!

0 个答案:

没有答案