From 29f6c6dfdf9242fe7fbef2fb506e91334a9f8c25 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 26 Jun 2022 03:38:07 +0900 Subject: [PATCH] crash report in HTML --- src/net/torvald/terrarum/GameCrashHandler.kt | 96 ++++++++++++++++---- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/src/net/torvald/terrarum/GameCrashHandler.kt b/src/net/torvald/terrarum/GameCrashHandler.kt index 5a970db9d..99551ebff 100644 --- a/src/net/torvald/terrarum/GameCrashHandler.kt +++ b/src/net/torvald/terrarum/GameCrashHandler.kt @@ -16,15 +16,60 @@ import javax.swing.* */ class GameCrashHandler(e: Throwable) : JFrame() { - val textArea = JTextArea() + val textArea = JTextPane() + + val htmlSB = StringBuilder() private val outputStream = object : OutputStream() { override fun write(p0: Int) { - textArea.append("${p0.toChar()}") + htmlSB.appendCodePoint(p0) } } - private val printStream = object : PrintStream(outputStream) {} + private val css = """ +body { + font-size: 12px; + font-family: sans-serif; + margin: 3px; + background-color: #fdfdfd; +} + +h3 { + font-size: 16px; + font-weight: 700; + color: #444; + margin: 20px 10px 12px 10px; +} + +h4 { + font-size: 14px; + font-weight: 500; + color: #444; + margin: 0 12px 6px 12px; +} + +li { + margin: 0; +} + +p { + margin: 3px 12px; +} + +pre { + font-faminy: monospaced; + color: #801; + border: 1px solid #801; + border-radius: 3px; + padding: 3px 6px; +} + """ + + private val printStream = object : PrintStream(outputStream) { + override fun println(x: String?) { + super.print(x) + } + } init { val border = JPanel() @@ -41,9 +86,9 @@ class GameCrashHandler(e: Throwable) : JFrame() { border.add(title, BorderLayout.NORTH) - textArea.font = Font("Monospaced", PLAIN, 14) textArea.isVisible = true textArea.isEditable = false + textArea.contentType = "text/html" border.add(JScrollPane(textArea), BorderLayout.CENTER) @@ -62,38 +107,51 @@ class GameCrashHandler(e: Throwable) : JFrame() { val uptime = App.getTIME_T() - App.startupTime // print out device info - printStream.println("== System Info ==") - printStream.println("Uptime: ${uptime / 3600}h${(uptime % 3600) / 60}m${uptime % 60}s") - printStream.println("Java version: ${System.getProperty("java.version")}") - printStream.println("OS Name: ${App.OSName}") - printStream.println("OS Version: ${App.OSVersion}") - printStream.println("System architecture: ${App.systemArch}") - printStream.println("Processor: ${App.processor} x${Runtime.getRuntime().availableProcessors()} (${App.processorVendor})") + printStream.println("

System Info

") + printStream.println("") - printStream.println() + printStream.println("

OpenGL Info

") + printStream.println("") + + printStream.println("

Module Info

") + printStream.println("

Load Order

") + printStream.println("
    ${ModMgr.loadOrder.joinToString(separator = "") { "
  1. $it
  2. " }}
") - printStream.println("== OpenGL Info ==") - printStream.println(Gdx.graphics.glVersion.debugVersionString) ModMgr.errorLogs.let { if (it.size > 0) { - printStream.println() - printStream.println("== Module Errors ==") + printStream.println("

Module Errors

") System.err.println("== Module Errors ==") it.forEach { - printStream.println("From Module '${it.moduleName}' (${it.type}):") + printStream.println("

From Module '${it.moduleName}' (${it.type}):

") + printStream.println("
")
                     it.cause?.printStackTrace(printStream)
+                    printStream.println("
") it.cause?.printStackTrace(System.err) } } } - printStream.println() - printStream.println("== The Error Info ==") + printStream.println("

The Error Info

") System.err.println("== The Error Info ==") + printStream.println("
")
         e.printStackTrace(printStream)
+        printStream.println("
") e.printStackTrace(System.err) + + + + textArea.text = "$htmlSB" } } \ No newline at end of file