我创建了一个Arduino设备,每次收到邮件时都会转换数据。数据通过Arduino使用Wi-Fi发送到下面的Web服务器。
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Mail Log</title>
</head>
<body>
<table id="mail" align="center" border="0" cellspacing="1" cellpadding="3">
<tr align="center">
<td> <strong>Time</strong> </td><td> <strong>Mail</strong> </td>
</tr>
<%
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/STACK","root","mingky1218");
ps=conn.prepareStatement("SELECT * FROM MESSAGE ORDER BY TIMESTAMP DESC");
rs=ps.executeQuery();
while(rs.next()){
String time=rs.getString("timeStamp");
String stack=rs.getString("STACK");
out.println("<tr><td> "+time+" </td><td> Letter: "+stack+" </td></tr>");
}
}catch(SQLException e){
e.printStackTrace();
}
%>
</table>
</body>
</html>
每当将数据输入到Web服务器上的表中时,Java Fx GUI便会出现,它必须实时更改该值,但不会更改。
public class Mail {
String mail;
public Mail() {
try {
Document doc = Jsoup.connect("http://localhost14999/stackserver/index.jsp").get();
Element table = doc.select("table").get(0);
Elements rows = table.select("tr");
Element row = rows.get(1);
Elements cols = row.select("td");
mail=cols.get(1).text();
}catch(IOException e) {
System.out.println(e.getMessage());
System.out.println(e.toString());
}
}
public String getMail() {
return mail;
}
}
上面是解析类Jsoup,下面是Java fx的控件。
public class Controller implements Initializable {
@FXML private Label mail;
private Mail mt=new Mail();
@Override
public void initialize(URL location, ResourceBundle resources) {
Thread thread = new Thread() {
@Override
public void run() {
while(true) {
String wfmail = mt.getMail();
Platform.runLater(()->{
mail.setText(wfmail);
});
try {Thread.sleep(1000);}catch(InterruptedException e) {}
}
}
};
thread.setDaemon(true);
thread.start();
};
}
我也尝试使用硒进行解析,但是结果是相同的。 解析某些数据已成功,但该值不会实时更改。 有什么办法吗?
答案 0 :(得分:0)
我不确定Java fx控制器的工作方式,但我假设将仅创建一个Controller实例,如果正确,则只创建一次Mail对象。因此,您尝试每次在同一对象上调用getMail()对象。 由于您是在对象构造期间(即在Mail contructor中)从Mail类请求index.jsp的,因此唯一实际从index.jsp读取数据的时间就是创建Mail对象时。从以上假设出发,在加载fx控制器时,它仅发生一次。因此,实现所需目标的最简单方法是将代码从Mail构造函数移至getMail()方法。
public String getMail() {
try {
Document doc = Jsoup.connect("http://localhost14999/stackserver/index.jsp").get();
Element table = doc.select("table").get(0);
Elements rows = table.select("tr");
Element row = rows.get(1);
Elements cols = row.select("td");
return cols.get(1).text();
}catch(IOException e) {
System.out.println(e.getMessage());
System.out.println(e.toString());
return "";
}
}
但是请注意,整个代码看起来很丑陋且不明显,因此可以将其用于快速尝试。