【发布时间】:2014-07-20 12:31:45
【问题描述】:
好的,这让我很生气了好几个小时。我不明白为什么这个 if 语句没有执行。这是我的完整代码。有2个类,'Client'是主类,另一个是连接器类。
package com.app.client;
import java.net.ServerSocket;
import java.sql.SQLException;
public class Client{
private int IntervalForDatabase=60000;
private int IntervalForIPCheck=180000;
private boolean AppRunning=true;
public boolean ConnectionSuccess=false;
private Connector ConnectionTools = new Connector();
public static void main(String args[]){
Thread thread = new Thread(new Runnable(){
public void run(){
Client client = new Client();
}
});
thread.start();
}
Client(){
/* Check For Current Instance Of Program */
try{
ServerSocket ApplicationSocket = new ServerSocket(6251);
}catch(Exception e){
System.exit(0);
}
Thread Network = new Thread(new Runnable(){
public void run(){
while(!ConnectionSuccess){
try{
ConnectionTools.ConnectToDatabaseServer();
ConnectionSuccess=true;
System.out.println("bein a bit");
}catch(Exception e){
}
}
}
});
Network.start();
Thread LiveConnectionCheck = new Thread(new Runnable(){
public void run(){
while(AppRunning){
if(ConnectionSuccess){
/* THIS IF STATEMENT IS NOT EXECUTING */
try {
System.out.println("tester");
Thread.sleep(IntervalForIPCheck);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
});
LiveConnectionCheck.start();
}
}
连接器类:
package com.app.client;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Connector {
public boolean DatabaseConnection=false;
Socket ClientSocket;
private String DatabaseHost="localhost";
private String DatabaseUsername="root";
private String DatabasePassword = "";
private String DatabaseName = "spyware";
private String TableName="activespywares";
public String CurrentServerIP = "";
private Connection MYSQLConnection = null;
public ResultSet result;
public void ConnectToDatabaseServer(){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
MYSQLConnection = DriverManager.getConnection("jdbc:mysql://"+DatabaseHost+"/"+DatabaseName,DatabaseUsername,DatabasePassword);
DatabaseConnection=true;
System.out.println("connected");
}catch(Exception e){
System.out.println(e);
DatabaseConnection=false;
return;
}
}
public String ObtainServerIP() throws SQLException{
String text = "";
try{
System.out.println("we've made it till here");
PreparedStatement state = MYSQLConnection.prepareStatement("SELECT * FROM `activespywares`");
result = state.executeQuery();
System.out.println("we've made it till here");
if(result.next()){
result.next();
text = result.getString("InternetProtocol");
}
return text;
}catch(Exception e){
System.out.println(e);
text=e+"";
}
return text;
}
}
我已经检查了所有内容。我不知道这里有什么问题。 if 语句在“客户端”类中。连接器类只是为了让您知道它不会引起问题。
【问题讨论】:
-
为什么是静态的?静态不起作用。
-
我建议您对变量名称使用 Java 命名约定。
-
我猜这里有竞争条件?也许
ConnectionSuccess永远不会设置为true?另外,试试调试程序,看看执行过程中ConnectionSuccess的值是什么.. -
尽量扔掉与问题无关的代码。然后我们将处于更好的位置来帮助您,也许您自己已经在这样做时发现了问题。代码太多了。
-
是的,我同意,java 命名约定是:变量以小写字母开头,类以大写字母开头。注意 stackoverflow 是如何突出显示你的变量名的,它认为它们是类型,因为它们是大写的
标签: java mysql concurrency