我正在制作一个java应用程序,它自动将数据发送到我的远程服务器。 我需要的是插入数据而不会给最终用户带来滞后感。远程数据库更新部分应该在后台运行。我尝试了 Swingworker、Thread 但没有任何效果。仍然落后于我的应用程序。这是我到目前为止所做的
public class uploader extends Thread {
static Socket socket;
static Timer ttt;
public void run() {
try {
ttt = new Timer(15000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
socket = new Socket("192.168.10.1", 3306);
//upload
ResultSet rs = DB.search("select query,id FROM general_log where state = 0 order by id asc");
while (rs.next()) {
try {
socket = new Socket("192.168.10.1", 3306);
DB2.acknowledge(rs.getString(1));
DB.acknowledge("update general_log set state = 1 where id = '" + rs.getString(2) + "'");
} catch (Exception e1) {
e1.printStackTrace();
System.out.println("error");
break;
}
}
} catch (Exception e3) {
System.out.println("error");
e3.printStackTrace();
}
}
});
ttt.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我在启动时运行它
Thread upl = new Thread(new uploader());
upl.start();
每 15 秒本地数据应上传到远程服务器。但在这里,当计时器运行时,我的 UI 会滞后 15 秒。
如何在不造成延迟的情况下做到这一点? 提前致谢。
最佳答案
你可以使用索引优化 SQL 查询,这是肯定的。
除了主要问题之外,使用在 new Handler()
中启动的计时器任务不是更好吗?
==============================================
例如,创建一个方法而不是类:
private final Handler handler = new Handler();
private TimerTask timerTask;
private Timer timer = new Timer();
...
public void sendBackgroundData() {
timerTask = new TimerTask() {
@Override
public void run() {
handler.post(() -> {
DO YOUR CODE
}
});
}
};
timer.schedule(timerTask, 0, 2000);
}
关于java - 在后台使用 JAVA 计时器,不会导致 UI 出现任何延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51638262/