我为记录用户活动的程序编写了一个插件。如果用户按下按钮并因此触发动作,则应将一些内容写入数据库。这个过程应该并行运行,因为它不应该延迟触发的动作:
if (con != null) {
SmartClientKernel.addPooledTask(new Runnable() {
@Override
public void run() {
ActionDispatcher.getInstance().addDispatchExtension(new IDispatchExtension() {
@Override
public void preprocessActionExecution(RPAction action) {
Calendar cal = Calendar.getInstance();
Date startTime = cal.getTime();
String actionName = action.getName();
java.sql.Timestamp sqlTime = new java.sql.Timestamp(startTime.getTime());
UUID id = UUID.randomUUID();
PreparedStatement statement;
try {
statement = con.prepareStatement("INSERT INTO " + tableName
+ " (ID, USERNAME, SESSIONID, PROJECTNAME, STARTTIME, ACTIONTYPE, ACTIONNAME) VALUES (?,?,?,?,?,?,?)");
statement.setString(1, id.toString());
statement.setString(2, userName);
statement.setString(3, sessionId);
statement.setString(4, projectName);
statement.setTimestamp(5, sqlTime);
statement.setString(6, "Action");
statement.setString(7, actionName);
statement.execute();
statement.close();
} catch (SQLException e) {
Log.getLogger().log(Level.SEVERE, e.getMessage(), e);
}
}
});
}
});
}
实际上,它工作得很好,但我想知道编程风格是否可以这样,因为我可以移动块:
SmartClientKernel.addPooledTask(new Runnable() {
@Override
public void run() {
进入方法 preprocessActionExecution() 似乎也有效。
你们有什么感想?
更新: 谢谢你们的反馈!