Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:简单If语句不执行_Java_Mysql_Concurrency - Fatal编程技术网

Java:简单If语句不执行

Java:简单If语句不执行,java,mysql,concurrency,Java,Mysql,Concurrency,好吧,这让我恼火了好几个小时。我不明白为什么这个if语句不能执行。这是我的完整代码。有两个类,“客户端”是主类,另一个是连接器类 package com.app.client; import java.net.ServerSocket; import java.sql.SQLException; public class Client{ private int IntervalForDatabase=60000; private int IntervalForIPCheck

好吧,这让我恼火了好几个小时。我不明白为什么这个if语句不能执行。这是我的完整代码。有两个类,“客户端”是主类,另一个是连接器类

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语句位于“Client”类中。连接器类只是让您知道它不会引起问题

        if(result.next()){
            result.next();
没道理。在这里两次调用result.next()时,您正在丢弃第一个结果


没道理。在这里两次调用result.next()时,您将丢弃第一个结果。

使
连接成功
或者将
volatile
更改为
原子布尔值(并标记为
final
)。问题是您在一个
线程中设置变量,但从另一个线程读取变量

使
连接成功
易失性
或更改为
原子布尔值
(并标记为
最终
)。问题是您在一个
线程中设置变量,但从另一个线程读取变量

对于您的例外情况,我建议使用

 e.printStackTace()
万一有什么东西破坏了你的程序

现在如果你执行

    //...your code
    if(result.next()){
        result.next();
    //...your code
它会丢弃你的第一个结果,并呈现给你第二个结果。我建议你使用

    //...your code
    while(result.next()){

    //...your code

若要根据需要滚动查看记录,请使用

 e.printStackTace()
万一有什么东西破坏了你的程序

现在如果你执行

    //...your code
    if(result.next()){
        result.next();
    //...your code
它会丢弃你的第一个结果,并呈现给你第二个结果。我建议你使用

    //...your code
    while(result.next()){

    //...your code


您可以随意滚动记录

为什么是静态的?。静态不起作用。我建议您对变量名使用Java命名约定。我猜这里有竞争条件?可能
ConnectionSuccess
从未设置为true?另外,试着调试程序,看看执行期间
ConnectionSuccess
的值是多少。试着扔掉与问题无关的代码。然后,我们将处于一个更好的位置来帮助你,也许你自己在这样做的时候已经发现了问题。这是太多的代码了。是的,我同意,java命名约定是:变量以小写字母开始,类以大写字母开始。注意stackoverflow是如何突出显示变量名的,它认为它们是类型,因为它们的大写字母是HY static?。静态不起作用。我建议您对变量名使用Java命名约定。我猜这里有竞争条件?可能
ConnectionSuccess
从未设置为true?另外,试着调试程序,看看执行期间
ConnectionSuccess
的值是多少。试着扔掉与问题无关的代码。然后,我们将处于一个更好的位置来帮助你,也许你自己在这样做的时候已经发现了问题。这是太多的代码了。是的,我同意,java命名约定是:变量以小写字母开始,类以大写字母开始。注意stackoverflow是如何突出显示变量名的,它认为它们是类型,因为它们是大写的。我想忽略第一行。但这不是主要的问题,我甚至添加了一个系统打印语句,但没有打印出任何正确但奇怪的东西。但是您可能还希望在对next()的第二个调用中添加if,以防结果只包含一行:}我知道,我想忽略第一行。但这不是主要的问题,我甚至添加了一个系统打印语句,但没有打印出任何正确但奇怪的东西。但是您可能还希望在对next()的第二次调用中添加if,以防结果只包含一行:}volatile做什么?什么是原子布尔数?@Talha Tanveer volatile防止缓存线程的变量。哪个vm可以优化code@TalhaTanveer听起来,在尝试使用并发应用程序之前,您需要对java中的并发编程进行一些研究。我强烈建议在实践中使用Java并发。客户机代码现在正在运行一个无限循环,检查另一个是否将布尔值转换为true。使用一个锁,这样它就可以在不消耗资源的情况下等待这种情况发生。volatile做什么?什么是原子布尔数?@Talha Tanveer volatile防止缓存线程的变量。哪个vm可以优化code@TalhaTanveer听起来,在尝试使用并发应用程序之前,您需要对java中的并发编程进行一些研究。我强烈建议在实践中使用Java并发。客户机代码现在正在运行一个无限循环,检查另一个是否将布尔值转换为true。使用一个锁,这样它就可以在不消耗资源的情况下等待这种情况的发生。这真的不是我的问题:阅读下面的第二个答案,另一个人已经说过了。我做了一些改变。打印出“e”有什么问题?@TalhaTanveer您的一些异常没有得到处理。添加它是为了调试。这真的不是我的问题:阅读下面的第二个答案,另一个人已经说过了。我做了一些改变。打印出“e”有什么问题?@TalhaTanveer您的一些异常没有得到处理。添加它以进行调试。