本帖最后由 a1294790523 于 2020-6-16 00:10 编辑
我当时就???了,因为从来没遇到这种情况,只好上网冲浪搜索看看
虽然说这个issue最后是通过PR解决的,但是我在回复中注意到了这个:通过查看代码可以发现当LOGGER.isDebugEnabled()返回true时输出带stacktrace的异常信息,从此总算有个入手点了,那么,怎么让LOGGER.isDebugEnabled()==true呢?
好家伙,没找到类,肯定是Forge忘记打包了,通过一番搜索找到这个类是一个叫jna的库里面的:https://github.com/java-native-access/jna
在里面找到了jna核心jar的下载地址:https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar
太长不看版:
下载Jna的核心jar,然后将里面除了META-INF的文件夹拖进服务端核心即可:
https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar
如果仍然没有解决,请参考梨子的解决帖:https://www.mcbbs.net/thread-548550-1-1.html
安装Microsoft Visual C++ 2008 SP1 Redistributable包
起因
某天闲着无聊想组一个1.12的纯Forge服务端和朋友玩,但是发现在服务端使用Tab补全时不管用,只会输出Tab字符。
奇怪的我翻了翻日志,发现第一行有这么一行warning:
2020-06-15 22:51:47,089 main WARN Disabling terminal, you're running in an unsupported environment.
解决经过
排在首页的结果都是Forge论坛内的,满心欢喜的我打开一看,结果里面都是“此版本已不受支持,请升级MC版本”。
不过老天不负有心人,总算是让我在这个paper的issue里面看见了曙光:
1.14.3 unsupported environment terminal
https://github.com/PaperMC/Paper/issues/2257
Minecrell:
TCA prints a proper stack trace for this when debug logging is enabled:
https://github.com/Minecrell/TerminalConsoleAppender/blob/23ac053d5a401761555f55cc6bb668a9f3474ad6/src/main/java/net/minecrell/terminalconsole/TerminalConsoleAppender.java#L241-L246
Right now I can't remember exactly how to enable debug logging. I believe it's not in log4j2.xml since it runs before logging configuration is initialized (you can see that because of the different log layout).
So it's probably one of the system properties: https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties
通过搜索,发现只需要让日志等级为DEBUG即可,于是愉悦地打开服务端核心jar,编辑内部的log4j2_server.xml修改日志级别,然后删除在META-INF的校验文件,启动一看:
2020-06-15 22:59:04,831 main WARN Disabling terminal, you're running in an unsupported environment. java.lang.IllegalStateException: Unable to create a system terminal
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:273)
at org.jline.terminal.TerminalBuilder.build(TerminalBuilder.java:219)
at net.minecraftforge.server.terminalconsole.TerminalConsoleAppender.initializeTerminal(TerminalConsoleAppender.java:243)
at net.minecraftforge.server.terminalconsole.TerminalConsoleAppender.<init>(TerminalConsoleAppender.java:213)
at net.minecraftforge.server.terminalconsole.TerminalConsoleAppender.createAppender(TerminalConsoleAppender.java:368)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:132)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:242)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)
at net.minecraft.launchwrapper.LogWrapper.configureLogging(LogWrapper.java:14)
at net.minecraft.launchwrapper.LogWrapper.log(LogWrapper.java:28)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:94)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:70)
at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:34)
Suppressed: java.lang.NoClassDefFoundError: com/sun/jna/win32/StdCallLibrary
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.jline.terminal.impl.jna.win.JnaWinSysTerminal.<clinit>(JnaWinSysTerminal.java:25)
at org.jline.terminal.impl.jna.JnaSupportImpl.winSysTerminal(JnaSupportImpl.java:26)
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:297)
... 33 more
Caused by: java.lang.ClassNotFoundException: com.sun.jna.win32.StdCallLibrary
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 48 more
Suppressed: java.lang.UnsupportedOperationException
at org.jline.terminal.impl.jansi.JansiSupportImpl.winSysTerminal(JansiSupportImpl.java:104)
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:305)
... 33 more
在里面找到了jna核心jar的下载地址:https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar
那么怎么让java载进这个jar呢?
最简单粗暴的方法就是将里面的类拖进服务端核心里面:
至此问题解决
相关链接:
服务器出现关于org.fusesource.jansi.WindowsAnsiOutputStream的错误之解决办法
https://www.mcbbs.net/thread-548550-1-1.html
???????????????????????????????????
感谢分享