java - 通过套接字将 JTable 数据从服务器发送到客户端 JTable
问题描述
我的 SERVER 表单上有一个 JTable,它是从 MySQL 数据库填充的,在构造函数中编码:
String sql = "SELECT * from fiekorari";
try{
pst=conn.prepareStatement(sql);
res=pst.executeQuery();
table.setModel(DbUtils.resultSetToTableModel(res));
pst.close();
res.close();
} catch (SQLException e1){
e1.printStackTrace();
}
使用 TCP 连接在主服务器上建立连接,服务器端:
public class Serveri extends JFrame {
private JPanel contentPane;
static ServerSocket ss;
static Socket s;
static DataInputStream din;
static DataOutputStream dout;
private JTextField txtMesazhi;
private static JTextArea txtA;
static Connection conn=null;
static ResultSet res= null;
static PreparedStatement pst = null;
private Object id;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Serveri frame = new Serveri();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
SqlConn.getConnection();
String msgin="";
try
{
ss=new ServerSocket(1201);
s=ss.accept();
din=new DataInputStream(s.getInputStream());
dout=new DataOutputStream(s.getOutputStream()); //code continues with chat programming
我想将数据从服务器端的 JTable 发送到客户端的 JTable,我不确定这是否是正确的方法,但我的任务是服务器将读取数据库数据并将其发送到客户端。
下面是客户端的代码,它通过 TCP 建立连接进行聊天,但现在必须添加一个表,该表通过套接字从服务器表中读取数据:
public class Klienti extends JFrame {
private JPanel contentPane;
private JTextField txtMesazhi;
private static JTextArea txtShfaq1;
static Socket s;
static DataInputStream din;
static DataOutputStream dout;
private JButton btnNewButton;
public static String sql1;
private JTable table;
private JTextField txtEmri;
private JTextField txtMbiemri;
private JTextField txtOra;
static Connection conn=null;
static ResultSet res= null;
static PreparedStatement pst = null;
private Pattern pattern;
private Matcher matcher;
private String loc;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Klienti frame = new Klienti();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
//SqlConn.getConnection();
try
{
s=new Socket("localhost",1201);
din=new DataInputStream(s.getInputStream());
dout=new DataOutputStream(s.getOutputStream());
//code in constructor Client side which sends text message to Server through sockets:
dout.writeUTF(msgout);
txtShfaq1.setText(txtShfaq1.getText().trim()+"\nJu:\t"+msgout);
txt.setText("");
解决方案
不,您不应该将 JTable 从服务器发送到客户端。实际上服务器不应该有任何摆动组件。它应该只根据请求获取数据并以合适的格式发送数据,而不是包装在 JTable 中。
还有一点,尽量不要做普通的socket通信。使用更高级别的协议,例如 HTTP。服务器可以运行 http web 服务,并且可以以 json、xml 格式提供数据。
客户端可以使用许多可用的 http 客户端中的任何一个从服务器获取数据。这些库已经处理了许多套接字连接问题。
推荐阅读
- javascript - 按对象键减少/过滤对象数组
- ios - 迅速关闭xib视图
- embedded - pic12f675 timer1 观察
- python - tkinter TreeView:禁用选择突出显示
- javascript - PhantomJS 抓取多个页面
- asp.net-mvc - 从 javascript 的 MVC 应用程序调用集成的 SignalR Web Api 服务
- angular - 组件渲染空白 HTML
- c++ - WaitForInputIdle 替代方法
- wordpress - 不要在 Wordpress 主题中加载“edits.css”
- mysql - 配置 Apache 503 敏感度