1

良い一日。アプリ クライアントからの多くのソケット接続を処理するサーバー アプリケーションをコーディングしました。各クライアントは、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");

}
}

事前に感謝します。ロジックに関するヘルプも大歓迎です。

編集:

私はこの例を見つけましたが、役に立つかもしれません。ご支援いただきありがとうございます。

https://sites.google.com/site/drjohnbmatthews/randomdata

4

1 に答える 1

1

リクエストを送信し、サーバーから結果を取得するクライアント側のロジックを別のバックグラウンド スレッドで実行します。それを達成するために使用できますSwingWorker。これにより、ロジックがバックグラウンド スレッドで実行されている間に、UI のプログレス バーを実行できます。例:スイングワーカー

于 2012-12-18T05:51:07.560 に答える