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