私のアプリケーションでは、私は別のシステムデータベースからIPアドレス通信を介してデータにアクセスしています。"スレッドの例外" Thread-1 "java.lang.StackOverflowError"を解決するには?私のアプリケーションで
そのため、データベースシステムがオフラインになっている場合、接続中に例外が発生するため、キャッチブロックで再びrun()メソッドを呼び出します。オンラインになると、アプリケーションが正常に実行されます。しかし、このプロセスで私は "スレッドで例外"スレッド1 "java.lang.StackOverflowError"この例外は私のシナリオでどのように解決するこの例外を取得しています。
MAIN CLASS :-
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new LsduJFrame().setVisible(true);
}
});
new Thread(new DisplayPlazaNameLocation()).start();// i am calling here
}
DisplayPlazaNameLocation:-
public class DisplayPlazaNameLocation implements Runnable{
static String plazaNameLocation;
static Connection con;
int i =0;
public void getPlazaNameLocation(){
try {
System.out.println("in getPlazaNameLocation()==============================================");
PreparedStatement pst=con.prepareStatement("SELECT DISTINCT Plaza_Loc FROM lsdu_live");
ResultSet rs = pst.executeQuery();
while(rs.next()){
plazaNameLocation = rs.getString("Plaza_Loc");
//System.out.println(plazaNameLocation);
}
String ar[] = plazaNameLocation.split(",");
jLabel199.setText("<html>"+ar[0]+"<br>"+ar[1]+"</html>");
rs.close();
pst.close();
con.close();
} catch (SQLException ex) {
run();
}
}
@Override
public void run(){
try {
Class.forName(DB_DRIVER_CLASS);
con= DriverManager.getConnection(DB_URL[0],DB_USERNAME,DB_PASSWORD);
if(con != null){
this.getPlazaNameLocation();}
} catch (ClassNotFoundException ex) {
run();
} catch (SQLException ex) {
run();
}
}
}
私はこの例外に細かい動作するアプリケーションを取得する前に、接続問題を解決するとき、私は考えます。この例外Exception in thread "Thread-1" java.lang.StackOverflowError
を取得していますいくつかの時間を実行した後:
この
は私のコードですしかし、この例外を取得した後は、その時点でこの例外を取得した後に解決を使用することはできません。アプリケーションを閉じて、その時点で再度開く必要があります。あなたのrun
方法で
How to resolve this issue with respect to my code ?
stackTrace() data:-
Exception in thread "Thread-1" java.lang.StackOverflowError
at java.lang.Exception.<init>(Exception.java:66)
at java.sql.SQLException.<init>(SQLException.java:70)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:435)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at lsdu_application.DisplayPlazaNameLocation.run(DisplayPlazaNameLocation.java:47)
at lsdu_application.DisplayPlazaNameLocation.run(DisplayPlazaNameLocation.java:59)
at
スタックトレースを添付できますか? – avojak
完全なスタックトレースを追加します。 – basic
例外が発生した場合は、 'run()'をもう一度呼び出すだけです。第2、第3、または第5000時間の間に何が起こると思いますか?それはあなたが十分に長く再試行すると、自動的には動作しません。 –