diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Launcher.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Launcher.java index e6744e119..20012cbc0 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Launcher.java @@ -124,15 +124,13 @@ public final class Launcher { minecraftMain.invoke(null, new Object[]{cmds}); } catch (Throwable throwable) { HMCLog.err("Cought exception!"); - final StringWriter trace = new StringWriter(); - PrintWriter writer = new PrintWriter(trace); - throwable.printStackTrace(writer); - final String advice = MinecraftCrashAdvicer.getAdvice(throwable); + String trace = StrUtils.getStackTrace(throwable); + final String advice = MinecraftCrashAdvicer.getAdvice(trace); MessageBox.Show(C.i18n("crash.minecraft") + ": " + advice); LogWindow.instance.log(C.i18n("crash.minecraft")); LogWindow.instance.log(advice); - LogWindow.instance.log(trace.toString()); + LogWindow.instance.log(trace); LogWindow.instance.setExit(TrueFunction.instance); LogWindow.instance.setVisible(true); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java index eed248384..6109b30fc 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java @@ -16,7 +16,6 @@ */ package org.jackhuang.hellominecraft.launcher.launch; -import java.util.ConcurrentModificationException; import org.jackhuang.hellominecraft.C; /** @@ -26,32 +25,42 @@ import org.jackhuang.hellominecraft.C; */ public final class MinecraftCrashAdvicer { - public static String getAdvice(Throwable t) { - return getAdvice(t, false); + public static String getAdvice(String trace) { + return getAdvice(trace, false); } - public static String getAdvice(Throwable t, boolean selfCrash) { - if (t.getCause() instanceof UnsupportedClassVersionError) { + public static String getAdvice(String trace, boolean selfCrash) { + /*if (t.getCause() instanceof UnsupportedClassVersionError) { return C.i18n("crash.advice.UnsupportedClassVersionError"); } else if (t instanceof ConcurrentModificationException) { return C.i18n("crash.advice.ConcurrentModificationException"); } else if (t instanceof SecurityException) { return C.i18n("crash.advice.SecurityException"); + } else if (t instanceof InvocationTargetException) { + return C.i18n("crash.advice.InvocationTargetException"); } else if (t instanceof NoSuchFieldError || (t.getCause() != null && t.getCause() instanceof NoSuchFieldException)) { return C.i18n("crash.advice.NoSuchFieldError"); - } else if (t instanceof NoClassDefFoundError || (t.getCause() != null && t.getCause() instanceof ClassNotFoundException)) { + } else if (t instanceof NoClassDefFoundError || t instanceof ClassNotFoundException || (t.getCause() != null && t.getCause() instanceof ClassNotFoundException)) { return C.i18n("crash.advice.ClassNotFondException"); - } - - if (t.getMessage() != null) { - if (t.getMessage().contains("OpenGL") || t.getMessage().contains("OpenAL")) { - return C.i18n("crash.advice.OpenGL"); - } - } - if (t.getCause() != null && t.getCause().getMessage() != null) { - if (t.getCause().getMessage().contains("no lwjgl in java.library.path")) { - return C.i18n("crash.advice.no_lwjgl"); - } + }*/ + + if (trace.contains("LWJGLException")) { + if(trace.contains("Pixel format not accelerated")) + return C.i18n("crash.advice.LWJGLException"); + } else if (trace.contains("UnsupportedClassVersionError")) { + return C.i18n("crash.advice.UnsupportedClassVersionError"); + } else if (trace.contains("ConcurrentModificationException")) { + return C.i18n("crash.advice.ConcurrentModificationException"); + } else if (trace.contains("SecurityException")) { + return C.i18n("crash.advice.SecurityException"); + } else if (trace.contains("NoSuchFieldException") || trace.contains("NoSuchFieldError")) { + return C.i18n("crash.advice.NoSuchFieldError"); + } else if (trace.contains("NoClassDefFoundError") || trace.contains("ClassNotFoundException")) { + return C.i18n("crash.advice.ClassNotFondException"); + } else if (trace.contains("no lwjgl in java.library.path")) { + return C.i18n("crash.advice.no_lwjgl"); + } else if (trace.contains("OpenGL") || trace.contains("OpenAL")) { + return C.i18n("crash.advice.OpenGL"); } return selfCrash ? C.i18n("crash.advice.no") : C.i18n("crash.advice.otherwise"); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReport.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReport.java index 28aa85443..eb48a299e 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReport.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/CrashReport.java @@ -47,7 +47,7 @@ public class CrashReport implements Thread.UncaughtExceptionHandler { text += " Time: " + DateFormat.getDateInstance().format(new Date()) + "\n"; text += " Thread: " + t.toString() + "\n"; text += "\n Advice: \n "; - text += MinecraftCrashAdvicer.getAdvice(e, true); + text += MinecraftCrashAdvicer.getAdvice(StrUtils.getStackTrace(e), true); text += "\n Content: \n "; text += StrUtils.getStackTrace(e) + "\n\n"; text += "-- System Details --\n"; diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties index 90716ba3b..7b54e0fc7 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N.properties @@ -101,8 +101,9 @@ ui.more=\u66f4\u591a crash.advice.UnsupportedClassVersionError=\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a\u60a8\u7684Java\u7248\u672c\u8fc7\u4e8e\u8001\u65e7\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u66f4\u6362\u6700\u65b0Java\u5e76\u5728\u7248\u672c\u8bbe\u7f6e\u7684Java\u8def\u5f84\u4e2d\u8bbe\u7f6e. crash.advice.ConcurrentModificationException=\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a\u60a8\u7684Java\u7248\u672c\u9ad8\u4e8eJava 1.8.0_11\u5bfc\u81f4\u7684,\u53ef\u4ee5\u5c1d\u8bd5\u5378\u8f7dJava8\u5b89\u88c5Java7\u3002 -crash.advice.ClassNotFoundException=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\u3002\u53ef\u4ee5\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 -crash.advice.NoSuchFieldError=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\u3002\u53ef\u4ee5\u901a\u8fc7\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 +crash.advice.ClassNotFoundException=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\uff0c\u8bf7\u91cd\u8bd5\u6216\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 +crash.advice.NoSuchFieldError=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\uff0c\u8bf7\u91cd\u8bd5\u6216\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 +crash.advice.LWJGLException=\u60a8\u7684\u7535\u8111\u4e0d\u6b63\u5e38\uff0c\u53ef\u80fd\u9700\u8981\u4f7f\u7528\u9a71\u52a8\u7cbe\u7075\u6216\u5176\u4ed6\u5b89\u88c5\u5668\u66f4\u65b0\u663e\u5361\u9a71\u52a8\u3002 crash.advice.SecurityException=\u53ef\u80fd\u662f\u60a8\u4fee\u6539\u4e86minecraft.jar\u4f46\u672a\u5220\u9664META-INF\u6587\u4ef6\u5939\u7684\u539f\u56e0\u3002\u8bf7\u901a\u8fc7\u538b\u7f29\u8f6f\u4ef6\u5220\u9664jar\u4e2d\u7684META-INF\u6587\u4ef6\u5939\u3002 crash.advice.otherwise=\u53ef\u80fd\u662fMod\u6216\u5176\u4ed6\u95ee\u9898\u3002 diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties index bd089430c..045dfbb07 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_en_US.properties @@ -96,9 +96,10 @@ ui.more=More crash.advice.UnsupportedClassVersionError=Maybe your java is too old, try to update the java. crash.advice.ConcurrentModificationException=Maybe your Java is newer than 1.8.0_11, you could downgrade to Java 7. -crash.advice.ClassNotFoundException=Minecraft or mods are incomplete. Update your game and mods! -crash.advice.NoSuchFieldError=Minecraft or mods are incomplete. Update your game and mods! -crash.advice.SecurityException=Maybe you have modified minecraft.jar but have not remove the META-INF.\u8bf7\u901a\u8fc7\u538b\u7f29\u8f6f\u4ef6\u5220\u9664jar\u4e2d\u7684META-INF\u6587\u4ef6\u5939\u3002 +crash.advice.ClassNotFoundException=Minecraft or mods are incomplete. Retry or update your game and mods! +crash.advice.NoSuchFieldError=Minecraft or mods are incomplete. Retry or update your game and mods! +crash.advice.LWJGLException=Maybe your video driver does not work well, please update your video driver. +crash.advice.SecurityException=Maybe you have modified minecraft.jar but have not removed the META-INF. crash.advice.otherwise=Maybe mods caused problems. crash.advice.OpenGL=Maybe drivers caused problems. diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties index a31bbfa84..ba46a5e81 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_CN.properties @@ -96,8 +96,9 @@ ui.more=\u66f4\u591a crash.advice.UnsupportedClassVersionError=\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a\u60a8\u7684Java\u7248\u672c\u8fc7\u4e8e\u8001\u65e7\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u66f4\u6362\u6700\u65b0Java\u5e76\u5728\u7248\u672c\u8bbe\u7f6e\u7684Java\u8def\u5f84\u4e2d\u8bbe\u7f6e. crash.advice.ConcurrentModificationException=\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a\u60a8\u7684Java\u7248\u672c\u9ad8\u4e8eJava 1.8.0_11\u5bfc\u81f4\u7684,\u53ef\u4ee5\u5c1d\u8bd5\u5378\u8f7dJava8\u5b89\u88c5Java7\u3002 -crash.advice.ClassNotFoundException=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\u3002\u53ef\u4ee5\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 -crash.advice.NoSuchFieldError=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\u3002\u53ef\u4ee5\u901a\u8fc7\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 +crash.advice.ClassNotFoundException=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\uff0c\u8bf7\u91cd\u8bd5\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 +crash.advice.NoSuchFieldError=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u51b2\u7a81\uff0c\u8bf7\u91cd\u8bd5\u6216\u4e0b\u8f7d\u6574\u5408\u5305\u89e3\u51b3\u95ee\u9898\u3002 +crash.advice.LWJGLException=\u60a8\u7684\u7535\u8111\u4e0d\u6b63\u5e38\uff0c\u53ef\u80fd\u9700\u8981\u4f7f\u7528\u9a71\u52a8\u7cbe\u7075\u6216\u5176\u4ed6\u5b89\u88c5\u5668\u66f4\u65b0\u663e\u5361\u9a71\u52a8\u3002 crash.advice.SecurityException=\u53ef\u80fd\u662f\u60a8\u4fee\u6539\u4e86minecraft.jar\u4f46\u672a\u5220\u9664META-INF\u6587\u4ef6\u5939\u7684\u539f\u56e0\u3002\u8bf7\u901a\u8fc7\u538b\u7f29\u8f6f\u4ef6\u5220\u9664jar\u4e2d\u7684META-INF\u6587\u4ef6\u5939\u3002 crash.advice.otherwise=\u53ef\u80fd\u662fMod\u6216\u5176\u4ed6\u95ee\u9898\u3002 diff --git a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties index 037ea660a..78a2050af 100644 --- a/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties +++ b/HMCLAPI/src/main/resources/org/jackhuang/hellominecraft/launcher/I18N_zh_TW.properties @@ -96,8 +96,9 @@ ui.more=\u66f4\u591a crash.advice.UnsupportedClassVersionError=\u9019\u53ef\u80fd\u662f\u56e0\u70ba\u60a8\u7684Java\u7248\u672c\u904e\u65bc\u8001\u820a\uff0c\u53ef\u4ee5\u5617\u8a66\u66f4\u63db\u6700\u65b0Java\u4e26\u5728\u7248\u672c\u8a2d\u5b9a\u7684Java\u8def\u5f91\u4e2d\u8a2d\u5b9a. crash.advice.ConcurrentModificationException=\u9019\u53ef\u80fd\u662f\u56e0\u70ba\u60a8\u7684Java\u7248\u672c\u9ad8\u65bcJava 1.8.0_11\u5c0e\u81f4\u7684,\u53ef\u4ee5\u5617\u8a66\u5378\u8f09Java8\u5b89\u88ddJava7\u3002 -crash.advice.ClassNotFoundException=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u885d\u7a81\u3002\u53ef\u4ee5\u4e0b\u8f09\u6574\u5408\u5305\u89e3\u6c7a\u554f\u984c\u3002 -crash.advice.NoSuchFieldError=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u885d\u7a81\u3002\u53ef\u4ee5\u901a\u904e\u4e0b\u8f09\u6574\u5408\u5305\u89e3\u6c7a\u554f\u984c\u3002 +crash.advice.ClassNotFoundException=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u885d\u7a81\uff0c\u8bf7\u91cd\u8bd5\u4e0b\u8f09\u6574\u5408\u5305\u89e3\u6c7a\u554f\u984c\u3002 +crash.advice.NoSuchFieldError=Minecraft\u4e0d\u5b8c\u6574\u6216Mod\u885d\u7a81\uff0c\u8bf7\u91cd\u8bd5\u901a\u904e\u4e0b\u8f09\u6574\u5408\u5305\u89e3\u6c7a\u554f\u984c\u3002 +crash.advice.LWJGLException=\u60a8\u7684\u7535\u8111\u4e0d\u6b63\u5e38\uff0c\u53ef\u80fd\u9700\u8981\u4f7f\u7528\u9a71\u52a8\u7cbe\u7075\u6216\u5176\u4ed6\u5b89\u88c5\u5668\u66f4\u65b0\u663e\u5361\u9a71\u52a8\u3002 crash.advice.SecurityException=\u53ef\u80fd\u662f\u60a8\u4fee\u6539\u4e86minecraft.jar\u4f46\u672a\u522a\u9664META-INF\u6587\u4ef6\u593e\u7684\u539f\u56e0\u3002\u8acb\u901a\u904e\u58d3\u7e2e\u8edf\u4ef6\u522a\u9664jar\u4e2d\u7684META-INF\u6587\u4ef6\u593e\u3002 crash.advice.otherwise=\u53ef\u80fd\u662fMod\u6216\u5176\u4ed6\u554f\u984c\u3002