- Баллы
- 76
- Имя в Minecraft
- _voidpointer
Пишу плагин с подключение к MySQL бд. Всё нормально, подключается, но при перезагрузке плагина /asw pmanager reload вылезает красивая ошибка:
Как это фиксить, чтобы можно было спокойно перезагружать плагин, а не сервер? 
PHP:
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
me/nyanguymf/jailplugin/managers/data/DatabaseManager.<init>()V @68: putfield
Reason:
Type 'me/nyanguymf/jailplugin/managers/data/MySQLCore' (current frame, stack[1]) is not assignable to 'me/nyanguymf/jailplugin/managers/data/Database'
Current Frame:
bci: @68
flags: { }
locals: { 'me/nyanguymf/jailplugin/managers/data/DatabaseManager', 'java/lang/String', 'java/lang/String', 'java/lang/String', integer, 'java/lang/String', 'java/lang/String' }
stack: { 'me/nyanguymf/jailplugin/managers/data/DatabaseManager', 'me/nyanguymf/jailplugin/managers/data/MySQLCore' }
Bytecode:
0x0000000: 2ab7 000c 120e b800 104c 1216 b800 104d
0x0000010: 1218 b800 104e 121a b800 1c36 0412 20b8
0x0000020: 0010 3a05 1222 b800 103a 062b 1224 b600
0x0000030: 2699 0019 2abb 002c 592c 2d15 0419 0519
0x0000040: 06b7 002e b500 31a7 0037 bb00 3359 1235
0x0000050: b700 372b b600 3a12 3eb6 003a b600 4012
0x0000060: 44b8 0046 bb00 3359 124c b700 372b b600
0x0000070: 3a12 3eb6 003a b600 4012 44b8 004e b1
Stackmap Table:
full_frame(@74,{Object[#1],Object[#39],Object[#39],Object[#39],Integer,Object[#39],Object[#39]},{})
same_frame(@126)
at me.nyanguymf.jailplugin.JailPlugin.onEnable(JailPlugin.java:40) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[patched_1.12.2.jar:git-Paper-1587]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:316) ~[patched_1.12.2.jar:git-Paper-1587]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-1587]
at autosaveworld.features.pluginmanager.InternalUtils.loadPlugin(InternalUtils.java:104) ~[?:?]
at autosaveworld.features.pluginmanager.PluginManager.reloadPlugin(PluginManager.java:253) ~[?:?]
at autosaveworld.features.pluginmanager.PluginManager.handlePluginManagerCommand(PluginManager.java:66) ~[?:?]
at autosaveworld.commands.subcommands.PluginManagerSubCommand.handle(PluginManagerSubCommand.java:36) ~[?:?]
at autosaveworld.commands.NoTabCompleteCommandsHandler.onCommand(NoTabCompleteCommandsHandler.java:113) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[patched_1.12.2.jar:git-Paper-1587]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:151) ~[patched_1.12.2.jar:git-Paper-1587]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:685) ~[patched_1.12.2.jar:git-Paper-1587]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:648) ~[patched_1.12.2.jar:git-Paper-1587]
at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:463) ~[patched_1.12.2.jar:git-Paper-1587]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:424) ~[patched_1.12.2.jar:git-Paper-1587]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774) ~[patched_1.12.2.jar:git-Paper-1587]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666) ~[patched_1.12.2.jar:git-Paper-1587]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
PHP:
/**
* DatabaseManager.java 2018-12-31
*
* @author NyanGuyMF
*
* @version 1.0
*/
package me.nyanguymf.jailplugin.managers.data;
import java.sql.Connection;
import me.nyanguymf.jailplugin.JailPlugin;
import me.nyanguymf.jailplugin.managers.ConfigManager;
/**
* Mediator pattern
*
* @author nyanguymf
*/
public class DatabaseManager implements IDatabase {
private Database databaseCore;
public DatabaseManager() {
String databaseDriver = ConfigManager.getString("database.db-driver");
String host = ConfigManager.getString("database.host");
String database = ConfigManager.getString("database.database");
int port = ConfigManager.getInt("database.port");
String user = ConfigManager.getString("database.user");
String password = ConfigManager.getString("database.password");
if (databaseDriver.equalsIgnoreCase("mysql")) {
databaseCore = new MySQLCore(host, database, port, user, password);
} else { // TODO: add other SQL drivers
// TODO: JailPlugin.log() && JailPlugin.debug()
JailPlugin.log("Couldn't load " + databaseDriver + " database driver", "DatabaseManager");
JailPlugin.debug("There is no " + databaseDriver + " database driver", "DatabaseManager");
}
}
@Override
public Connection getConnection() {
return databaseCore.getConnection();
}
@Override
public boolean isConnected() {
return databaseCore.isConnected();
}
@Override
public void close() {
databaseCore.isConnected();
}
}
PHP:
/**
* MySQLCore.java 2018-12-31
*
* @author NyanGuyMF
*
* @version 1.0
*/
package me.nyanguymf.jailplugin.managers.data;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLNonTransientConnectionException;
import me.nyanguymf.jailplugin.JailPlugin;
/**
* @author nyanguymf
*
*/
class MySQLCore extends Database {
public MySQLCore(String host, String database, int port, String user, String password) {
this.host = host;
this.database = database;
this.port = port;
this.user = user;
this.password = password;
try {
connect();
} catch (SQLNonTransientConnectionException ex) {
JailPlugin.debug("You can use https://stackoverflow.com/questions/1673530/"
+"error-2003-hy000-cant-connect-to-mysql-server-on-127-0-0-1-111 to fix this", "Database");
ex.printStackTrace();
}
}
/**
* Connect to database.
*/
private void connect() throws SQLNonTransientConnectionException {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://" + host + ":" + port + "/" + database
+ "?useUnicode=true&characterEncoding=utf-8&autoReconnect=true"
, user, password
);
} catch (SQLException ex) {
JailPlugin.debug("SQL Exception", "MySQLCore#connect()");
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
JailPlugin.debug("Class com.mysql.jdbc.Driver not found", "MySQLCore#connect()");
ex.printStackTrace();
}
}
@Override
public Connection getConnection() {
try {
if (connection.isClosed() || connection == null)
connect();
} catch (SQLException ex) {
JailPlugin.debug("SQL Exception", "MySQLCore#getConnection()");
ex.printStackTrace();
}
return connection;
}
@Override
public boolean isConnected() {
return connection != null; // && connection.isClosed() ??
}
@Override
public void close() {
try {
if (isConnected())
connection.close();
} catch (SQLException e) {
JailPlugin.debug("SQL Exception", "MySQLCore#close()");
e.printStackTrace();
}
}
}
