JavaFX异常

JavaFX异常,java,eclipse,exception,javafx,Java,Eclipse,Exception,Javafx,我对JavaFX异常有一些问题。我的项目在Eclipse中工作,但现在我的朋友也在尝试访问该项目。我们已共享并直接保存到dropbox文件夹。但他根本无法让它工作。他在控制台中得到了这个错误。 我真的很想解释一下这意味着什么……) 数据库连接: package application; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import javafx.col

我对JavaFX异常有一些问题。我的项目在Eclipse中工作,但现在我的朋友也在尝试访问该项目。我们已共享并直接保存到dropbox文件夹。但他根本无法让它工作。他在控制台中得到了这个错误。 我真的很想解释一下这意味着什么……)

数据库连接:

package application;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.DatabaseMetaData;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

import controllers.IReportStatus;

public class DBManager {

    private static DBManager INSTANCE;

    private final String MYSQL_URL = "jdbc:mysql://213.65.171.115:3306";
    private final String MYSQL_DATABASE = "/bluerift";
    private final String MYSQL_USER = "test";
    private final String MYSQL_PW = "test";
    private String CURRENT_USER = null;
    private String CURRENT_TIMELINE = null;

    private Connection conn = null;
    private Statement st = null;
    private ResultSet rs = null;
    private PreparedStatement preparedStatement = null;;
    private DatabaseMetaData dbm = null;

    private IReportStatus reportStatus;

    private DBManager() {
    }

    public boolean connect() {
        try {
            if (conn != null) {
                return true;
            }

            Class.forName("com.mysql.jdbc.Driver");

            conn = (Connection) DriverManager.getConnection(MYSQL_URL
                    + MYSQL_DATABASE, MYSQL_USER, MYSQL_PW);
            st = (Statement) conn.createStatement();
            dbm = (DatabaseMetaData) conn.getMetaData();
            System.out.println("DevCon: Connected");
            return true;
        }

        catch (Exception ex) {
            reportStatus.setMsg("Could not reach database.");
            conn = null;
            st = null;
            rs = null;
            return false;
        }
    }

    public boolean userLogin(String aUserName, String aPassword) {
        aUserName = aUserName.trim();

        if (aUserName.isEmpty()) {
            reportStatus.setMsg("Empty Username");
            return false;
        }

        if (aUserName.contains(" ")) {
            reportStatus.setMsg("Username can not contain whitespaces");
            return false;
        }

        if (aPassword.isEmpty()) {
            reportStatus.setMsg("Empty Password");
            return false;
        }

        try {
            String query = "SELECT userName,userPassword FROM users";
            rs = st.executeQuery(query);

            while (rs.next()) {
                if (rs.getString("userName").equals(aUserName)) {

                    if (rs.getString("userPassword").equals(aPassword)) {
                        System.out.println("DevCon: User "
                                + MyUtil.quote(aUserName) + " logged in");
                        CURRENT_USER = aUserName;

                        return true;
                    }

                    else {
                        reportStatus.setMsg("Wrong Password");
                        return false;
                    }
                }
            }

            reportStatus.setMsg("Username not found in database");
            return false;
        }

        catch (Exception ex) {
            reportStatus.setMsg("Could not reach database.");
            conn = null;
            st = null;
            rs = null;
            return false;
        }
    }

    public boolean userRegister(String aName, String aPassword,
            String confirmPassword, String aEmail) {

        aEmail = aEmail.trim();
        aName = aName.trim();

        if (aName.length() < 5 || aName.length() > 25) {
            reportStatus
            .setMsg("Username has to be between 5 and 25 characters long");
            return false;
        }

        if (!MyUtil.isAlphaNumericUs(aName)) {
            reportStatus
            .setMsg("Username can only contain a-Z, A-Z, 0-9 and _");
            return false;
        }

        if (aEmail.isEmpty()) {
            reportStatus.setMsg("Email can not be empty");
            return false;
        }

        if (!MyUtil.isVaildEmail(aEmail)) {
            reportStatus.setMsg("Email incorrect");
            return false;
        }

        if (aPassword.length() < 5 || aPassword.length() > 30
                || confirmPassword.length() < 5
                || confirmPassword.length() > 30) {
            reportStatus
            .setMsg("Password must be between 5 and 30 characters long");
            return false;
        }

        if (!aPassword.equals(confirmPassword)) {
            reportStatus.setMsg("Password does not match");
            return false;
        }

        try {
            String query = "SELECT userName, userEmail FROM users";
            rs = st.executeQuery(query);

            while (rs.next()) {
                if (aName.equals(rs.getString("userName"))) {
                    reportStatus.setMsg("Username already registred");
                    return false;
                }

                if (aEmail.equals(rs.getString("userEmail"))) {
                    reportStatus.setMsg("Email already registred");
                    return false;
                }
            }

            query = "INSERT INTO users (userName, userPassword, userEmail)"
                    + " VALUES (?, ?, ?)";

            preparedStatement = (PreparedStatement) conn
                    .prepareStatement(query);
            preparedStatement.setString(1, aName);
            preparedStatement.setString(2, aPassword);
            preparedStatement.setString(3, aEmail);
            preparedStatement.execute();
        }

        catch (Exception ex) {
            System.out.println("Error: " + ex);
            return false;
        }

        return true;
    }

    public boolean createTimeline(String timelineName) {
        timelineName = timelineName.trim();

        if (timelineName.length() < 3 || timelineName.length() > 15) {
            reportStatus
            .setMsg("Name must be between 3 and 15 characters long");
            return false;
        }

        System.out.println("timeline name in: " + timelineName);
        if (!MyUtil.isAlphaNumeric(timelineName) || timelineName.isEmpty()) {
            reportStatus
            .setMsg("Invaild timeline name. Allowed symbols are a-z, A-Z and 0-9");
            return false;
        }

        if (timelineExists(timelineName)) {

            reportStatus.setMsg("Timeline called " + MyUtil.quote(timelineName)
                    + " already exists");
            return false;
        }

        else {

            String query = "CREATE TABLE `bluerift`.`"
                    + getCurrentUser()
                    + "-"
                    + timelineName
                    + "` (`id` INT NOT NULL AUTO_INCREMENT,`eventName` VARCHAR(45) NULL,`eventYear` INT NULL,`eventDesc` LONGBLOB NULL,PRIMARY KEY (`id`));";

            try {
                st.executeUpdate(query);
            } catch (SQLException e) {

                e.printStackTrace();
            }
        }
        return true;
    }

    public ObservableList<String> receiveTimelines() {
        ObservableList<String> temp = FXCollections.observableArrayList();

        try {
            rs = dbm.getTables(null, null, "%", null);
            while (rs.next()) {

                if (rs.getString(3).contains(getCurrentUser() + "-")) {
                    temp.add(rs.getString(3).substring(
                            getCurrentUser().length() + 1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return temp;

    }

    private boolean timelineExists(String t) {

        try {
            rs = dbm.getTables(null, null, CURRENT_USER + "-" + t, null);

            if (rs.next()) {
                return true;
            }
        }

        catch (SQLException e) {
            e.printStackTrace();
        }

        return false;
    }

    public void deleteTimeline(String timelineName) {
        try {
            String query = "DROP TABLE `bluerift`.`" + getCurrentUser() + "-"
                    + timelineName + "`;";
            st.executeUpdate(query);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public String getCurrentUser() {
        if (CURRENT_USER == null) {
            return "DevCon: No user online";
        }

        return CURRENT_USER;
    }

    public void userLogout() {
        if (CURRENT_USER != null) {
            System.out.println("DevCon: User " + CURRENT_USER + " logged out");
            CURRENT_USER = null;
        }

        else {
            System.out.println("DevCon: No user online");
        }
    }

    public void setReportTo(IReportStatus reportStatus) {
        System.out.println("new ReportStatus is: " + reportStatus);
        this.reportStatus = reportStatus;
    }

    public String getCurrentTimeline() {
        return CURRENT_TIMELINE;
    }

    public static DBManager getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new DBManager();
        }
        return INSTANCE;
    }

}
包应用;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入com.mysql.jdbc.Connection;
导入com.mysql.jdbc.DatabaseMetaData;
导入com.mysql.jdbc.PreparedStatement;
导入com.mysql.jdbc.Statement;
导入controllers.IReportStatus;
公共类数据库管理器{
私有静态DBManager实例;
私有最终字符串MYSQL\u URL=“jdbc:mysql://213.65.171.115:3306";
私有最终字符串MYSQL_DATABASE=“/bluerift”;
私有最终字符串MYSQL\u USER=“test”;
私有最终字符串MYSQL_PW=“test”;
私有字符串CURRENT_USER=null;
私有字符串CURRENT_TIMELINE=null;
专用连接conn=null;
私有语句st=null;
私有结果集rs=null;
private PreparedStatement PreparedStatement=null;;
私有数据库元数据dbm=null;
私有IReportStatus报告状态;
私有DBManager(){
}
公共布尔连接(){
试一试{
如果(conn!=null){
返回true;
}
Class.forName(“com.mysql.jdbc.Driver”);
conn=(连接)DriverManager.getConnection(MYSQL\uURL
+MYSQL_数据库,MYSQL_用户,MYSQL_PW);
st=(语句)conn.createStatement();
dbm=(DatabaseMetaData)conn.getMetaData();
System.out.println(“DevCon:Connected”);
返回true;
}
捕获(例外情况除外){
reportStatus.setMsg(“无法访问数据库”);
conn=null;
st=null;
rs=null;
返回false;
}
}
公共布尔用户登录(字符串aUserName,字符串aPassword){
aUserName=aUserName.trim();
if(aUserName.isEmpty()){
reportStatus.setMsg(“空用户名”);
返回false;
}
if(aUserName.contains(“”){
setMsg(“用户名不能包含空格”);
返回false;
}
if(aPassword.isEmpty()){
reportStatus.setMsg(“空密码”);
返回false;
}
试一试{
String query=“从用户中选择用户名、用户密码”;
rs=st.executeQuery(查询);
while(rs.next()){
if(rs.getString(“用户名”).equals(aUserName)){
if(rs.getString(“userPassword”).equals(aPassword)){
System.out.println(“DevCon:User”
+MyUtil.quote(aUserName)+“登录”);
当前用户=aUserName;
返回true;
}
否则{
reportStatus.setMsg(“错误密码”);
返回false;
}
}
}
reportStatus.setMsg(“数据库中未找到用户名”);
返回false;
}
捕获(例外情况除外){
reportStatus.setMsg(“无法访问数据库”);
conn=null;
st=null;
rs=null;
返回false;
}
}
公共布尔用户寄存器(字符串aName、字符串aPassword、,
字符串确认密码,字符串aEmail){
aEmail=aEmail.trim();
aName=aName.trim();
if(aName.length()<5 | | aName.length()>25){
报告状态
.setMsg(“用户名长度必须介于5到25个字符之间”);
返回false;
}
如果(!MyUtil.isAlphaNumericUs(aName)){
报告状态
.setMsg(“用户名只能包含a-Z、a-Z、0-9和”);
返回false;
}
if(aEmail.isEmpty()){
reportStatus.setMsg(“电子邮件不能为空”);
返回false;
}
如果(!MyUtil.isVaildEmail(aEmail)){
reportStatus.setMsg(“电子邮件不正确”);
返回false;
}
如果(aPassword.length()<5 | | aPassword.length()>30
||confirmPassword.length()<5
||confirmPassword.length()>30){
报告状态
.setMsg(“密码长度必须介于5到30个字符之间”);
返回false;
}
如果(!aPassword.equals(confirmPassword)){
reportStatus.setMsg(“密码不匹配”);
返回false;
}
试一试{
String query=“选择用户名,userEmail FROM users”;
rs=st.executeQuery(查询);
while(rs.next()){
if(aName.equals(rs.getString(“用户名”)){
reportStatus.setMsg(“用户名已注册”);
返回false;
}
if(aEmail.equals(rs.getString(“userEmail”)){
reportStatus.setMsg(“电子邮件已注册”);
返回false;
}
}
query=“插入用户(用户名、用户密码、用户电子邮件)”
+“值(?,?)”;
preparedStatement=(preparedStatement)conn
.prepareStatement(查询);
编制报表。设置字符串(1,aName);
准备好的报表。设置字符串(2,aPassword);
编制报表。设置字符串(3,aEmail);
preparedStatement.execute();
}
捕获(例外情况除外){
System.out.println(“错误:+ex”);
返回false;
}
返回true;
}
公众的
package application;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.DatabaseMetaData;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

import controllers.IReportStatus;

public class DBManager {

    private static DBManager INSTANCE;

    private final String MYSQL_URL = "jdbc:mysql://213.65.171.115:3306";
    private final String MYSQL_DATABASE = "/bluerift";
    private final String MYSQL_USER = "test";
    private final String MYSQL_PW = "test";
    private String CURRENT_USER = null;
    private String CURRENT_TIMELINE = null;

    private Connection conn = null;
    private Statement st = null;
    private ResultSet rs = null;
    private PreparedStatement preparedStatement = null;;
    private DatabaseMetaData dbm = null;

    private IReportStatus reportStatus;

    private DBManager() {
    }

    public boolean connect() {
        try {
            if (conn != null) {
                return true;
            }

            Class.forName("com.mysql.jdbc.Driver");

            conn = (Connection) DriverManager.getConnection(MYSQL_URL
                    + MYSQL_DATABASE, MYSQL_USER, MYSQL_PW);
            st = (Statement) conn.createStatement();
            dbm = (DatabaseMetaData) conn.getMetaData();
            System.out.println("DevCon: Connected");
            return true;
        }

        catch (Exception ex) {
            reportStatus.setMsg("Could not reach database.");
            conn = null;
            st = null;
            rs = null;
            return false;
        }
    }

    public boolean userLogin(String aUserName, String aPassword) {
        aUserName = aUserName.trim();

        if (aUserName.isEmpty()) {
            reportStatus.setMsg("Empty Username");
            return false;
        }

        if (aUserName.contains(" ")) {
            reportStatus.setMsg("Username can not contain whitespaces");
            return false;
        }

        if (aPassword.isEmpty()) {
            reportStatus.setMsg("Empty Password");
            return false;
        }

        try {
            String query = "SELECT userName,userPassword FROM users";
            rs = st.executeQuery(query);

            while (rs.next()) {
                if (rs.getString("userName").equals(aUserName)) {

                    if (rs.getString("userPassword").equals(aPassword)) {
                        System.out.println("DevCon: User "
                                + MyUtil.quote(aUserName) + " logged in");
                        CURRENT_USER = aUserName;

                        return true;
                    }

                    else {
                        reportStatus.setMsg("Wrong Password");
                        return false;
                    }
                }
            }

            reportStatus.setMsg("Username not found in database");
            return false;
        }

        catch (Exception ex) {
            reportStatus.setMsg("Could not reach database.");
            conn = null;
            st = null;
            rs = null;
            return false;
        }
    }

    public boolean userRegister(String aName, String aPassword,
            String confirmPassword, String aEmail) {

        aEmail = aEmail.trim();
        aName = aName.trim();

        if (aName.length() < 5 || aName.length() > 25) {
            reportStatus
            .setMsg("Username has to be between 5 and 25 characters long");
            return false;
        }

        if (!MyUtil.isAlphaNumericUs(aName)) {
            reportStatus
            .setMsg("Username can only contain a-Z, A-Z, 0-9 and _");
            return false;
        }

        if (aEmail.isEmpty()) {
            reportStatus.setMsg("Email can not be empty");
            return false;
        }

        if (!MyUtil.isVaildEmail(aEmail)) {
            reportStatus.setMsg("Email incorrect");
            return false;
        }

        if (aPassword.length() < 5 || aPassword.length() > 30
                || confirmPassword.length() < 5
                || confirmPassword.length() > 30) {
            reportStatus
            .setMsg("Password must be between 5 and 30 characters long");
            return false;
        }

        if (!aPassword.equals(confirmPassword)) {
            reportStatus.setMsg("Password does not match");
            return false;
        }

        try {
            String query = "SELECT userName, userEmail FROM users";
            rs = st.executeQuery(query);

            while (rs.next()) {
                if (aName.equals(rs.getString("userName"))) {
                    reportStatus.setMsg("Username already registred");
                    return false;
                }

                if (aEmail.equals(rs.getString("userEmail"))) {
                    reportStatus.setMsg("Email already registred");
                    return false;
                }
            }

            query = "INSERT INTO users (userName, userPassword, userEmail)"
                    + " VALUES (?, ?, ?)";

            preparedStatement = (PreparedStatement) conn
                    .prepareStatement(query);
            preparedStatement.setString(1, aName);
            preparedStatement.setString(2, aPassword);
            preparedStatement.setString(3, aEmail);
            preparedStatement.execute();
        }

        catch (Exception ex) {
            System.out.println("Error: " + ex);
            return false;
        }

        return true;
    }

    public boolean createTimeline(String timelineName) {
        timelineName = timelineName.trim();

        if (timelineName.length() < 3 || timelineName.length() > 15) {
            reportStatus
            .setMsg("Name must be between 3 and 15 characters long");
            return false;
        }

        System.out.println("timeline name in: " + timelineName);
        if (!MyUtil.isAlphaNumeric(timelineName) || timelineName.isEmpty()) {
            reportStatus
            .setMsg("Invaild timeline name. Allowed symbols are a-z, A-Z and 0-9");
            return false;
        }

        if (timelineExists(timelineName)) {

            reportStatus.setMsg("Timeline called " + MyUtil.quote(timelineName)
                    + " already exists");
            return false;
        }

        else {

            String query = "CREATE TABLE `bluerift`.`"
                    + getCurrentUser()
                    + "-"
                    + timelineName
                    + "` (`id` INT NOT NULL AUTO_INCREMENT,`eventName` VARCHAR(45) NULL,`eventYear` INT NULL,`eventDesc` LONGBLOB NULL,PRIMARY KEY (`id`));";

            try {
                st.executeUpdate(query);
            } catch (SQLException e) {

                e.printStackTrace();
            }
        }
        return true;
    }

    public ObservableList<String> receiveTimelines() {
        ObservableList<String> temp = FXCollections.observableArrayList();

        try {
            rs = dbm.getTables(null, null, "%", null);
            while (rs.next()) {

                if (rs.getString(3).contains(getCurrentUser() + "-")) {
                    temp.add(rs.getString(3).substring(
                            getCurrentUser().length() + 1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return temp;

    }

    private boolean timelineExists(String t) {

        try {
            rs = dbm.getTables(null, null, CURRENT_USER + "-" + t, null);

            if (rs.next()) {
                return true;
            }
        }

        catch (SQLException e) {
            e.printStackTrace();
        }

        return false;
    }

    public void deleteTimeline(String timelineName) {
        try {
            String query = "DROP TABLE `bluerift`.`" + getCurrentUser() + "-"
                    + timelineName + "`;";
            st.executeUpdate(query);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public String getCurrentUser() {
        if (CURRENT_USER == null) {
            return "DevCon: No user online";
        }

        return CURRENT_USER;
    }

    public void userLogout() {
        if (CURRENT_USER != null) {
            System.out.println("DevCon: User " + CURRENT_USER + " logged out");
            CURRENT_USER = null;
        }

        else {
            System.out.println("DevCon: No user online");
        }
    }

    public void setReportTo(IReportStatus reportStatus) {
        System.out.println("new ReportStatus is: " + reportStatus);
        this.reportStatus = reportStatus;
    }

    public String getCurrentTimeline() {
        return CURRENT_TIMELINE;
    }

    public static DBManager getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new DBManager();
        }
        return INSTANCE;
    }

}
Caused by: java.lang.NullPointerException
 at application.DBManager.connect(DBManager.java:54)
reportStatus.setMsg("Could not reach database.");