本帖最后由 cxmessage 于 2013-08-10 13:34:17 编辑

解决方案 »

  1.   

    你的问题不是timer定时器怎么使用的问题,而是需要了解 局部内部类的使用方式局部内部类 
    内部类定义在方法中成为局部内部类,只在局部有效。该类只为所在的方法块服务。 
    局部内部类和成员内部类一样可以访问外围类的所有成员,但是不可以访问同在一个局部块的普通局部变量。如果要访问,此局部变量要被声明称final的。 
    代码块结束后普通的局部变量会消亡,而创建的局部内部类对象并不会随着语句块的结束而消亡。final的局部变量的存储方式和普通的局部变量不同,其不会因为语句块的结束而消失,还会长期存在,因此可以被局部内部类访问。
      

  2.   

    public List<Articles> query(int indexone, int indextwo, String titleonetitle) {
            String sqlstr = "SELECT articles.id,articles.title,MAX(clickcounts) AS clickcounts,articles.img FROM articles WHERE "
                    + "forid IN(SELECT titletwo.`ID` FROM titletwo WHERE forid IN (SELECT id FROM titleone WHERE titletab=?)) GROUP BY clickcounts desc limit ?,?;";
            mysqlcon = Mysqlcon.getInstacce();
            final Connection connection = null;
            try {
                connection = mysqlcon.getConnection();
            } catch (SQLException e1) {
                System.err.println("获取连接桥失败..");
                e1.printStackTrace();
            }
            List<Articles> list = new ArrayList<>();
            try {
                final PreparedStatement ps = (PreparedStatement) connection.prepareStatement(sqlstr);
                ps.setString(1, titleonetitle);
                ps.setInt(2, indexone);
                ps.setInt(3, indextwo);
                final ResultSet rs = (ResultSet) ps.executeQuery();
                while (rs.next()) {
                    Articles articles = new Articles();
                    articles.setId(rs.getInt(1));
                    articles.setTitle(rs.getString(2));
                    articles.setClickcounts(rs.getInt(3));
                    articles.setImg(rs.getString(4));
                    list.add(articles);
                }
                timer = new Timer(true);
                timer.schedule(new TimerTask() {
                    public void run() {
                  //这里会报错,说的是必须设置rs,connection为final类型
                        mysqlcon.free(rs, ps, connection);
                    }
                }, 0, 5000);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return list;
        }
      

  3.   

    要求final,就满足它吧。
    这时候外边可不能再close它们了。
      

  4.   

     timer.schedule(new EveryNMinuteDataCollectionTask(location),m*1000,n*1000*60);