我创建了一个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();
};
}
我也尝试过使用selenium进行解析,但结果是一样的。某些数据解析成功,但数值没有实时变化。有什么好办法吗?
发布于 2019-04-01 02:18:29
我不确定Java fx控制器是如何工作的,但我假设只会创建一个controller的实例,如果这是正确的,那么您只需要创建一次Mail对象。因此,您每次都试图在同一对象上调用getMail()对象。由于您在对象构造期间(即在Mail构造器中)从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 "";
}
}
但请注意,整个代码看起来丑陋且不明显,因此可以仅用于快速尝试。
https://stackoverflow.com/questions/55442533
复制相似问题