美好的一天。我编写了一个服务器应用程序,它处理来自应用程序客户端的许多套接字连接,每个客户端向服务器请求来自sql数据库的某些信息,以显示在其gui接口中,调用服务器内部的方法来进行查询并检索数据。
在某些情况下,应用程序在尝试从服务器检索数据时挂起,我希望我的应用程序不会冻结,而是在检索请求时显示进度条或加载动画。这有点可能吗?我已经阅读过关于线程,工作者和SQL池的内容,但我并不确切知道它适合我的需求。
我在服务器应用程序上有这个类来管理我的查询:
final class QueryManager {
//abstract System.out.println("Ya");
static Connection con = null;
static String LoginMsg = "No conectado";
public static void init(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con=DriverManager.getConnection("jdbc:sqlserver://PERSONAL:49617;databaseName=prueba","sa", "12345678");
System.out.println("Conexión Establecida");
LoginMsg = "Conectado al Servidor";
}catch(ClassNotFoundException | SQLException e){
e.printStackTrace();
System.out.println("Exception: " + e.getMessage());
}
}
public static void Query(String query, int i){
try{
Statement st = con.createStatement();
try (ResultSet rset = st.executeQuery(Pquery(query))) {
rset.next();
System.out.println(rset.getString(1)+i);
}
}catch(SQLException e){
System.out.println(e);
}
}
public static String Pquery(String pquery){
return pquery;
}
public static boolean Login(String user, String pass){
boolean r = false;
try{
Statement getCon = con.createStatement();
ResultSet EQuery = getCon.executeQuery("select * from users where usuario ='"+user+"' and contrasena ='"+pass+"'");
EQuery.next();
if(EQuery.getString(1) != null){
r = true;
LoginMsg = "Bienvenido";
}else{
r = false;
}
EQuery.close();
}catch(SQLException e){
System.out.println(e);
}
return r;
}
public static String getLoginMsg(){
return LoginMsg;
}
public static void printer(){
System.out.println("Ya");
}
}
提前感谢您,对逻辑的任何帮助也将不胜感激。
编辑:
我找到了这个例子并且可能有用。感谢您的支持。
答案 0 :(得分:1)
运行客户端逻辑,发送请求并从单独的背景线程中获取服务器的结果。您可以使用SwingWorker
来实现这一目标。借助于此,您可以在该逻辑在backgroud线程中运行时为UI运行进度条。
例如:swing worker