andylizi
本帖最后由 andylizi 于 2016-1-30 10:14 编辑

诶话说这帖子又触到哪个审核关键字了。。

正题。
以前开Cauldron服务器时,遇到个很奇怪的事情:在我自己电脑(Windows 7)上能正常运作的服务端,放到机房(Windows Server 2008)上就打不开了。启动时老是出现“Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream”。然后就自动退出。百思不得其解。去问百度,翻了半天,最后在百度知道的一个提问里找到了答案。



此问题出现的原因(看不懂的可以跳过直接到“解决方案”)
org.fusesource.jansi是一个叫JAnsi的使用Native的Java库的包名。作者对这个包的描述是:
Jansi is a small java library that allows you to use ANSI escape sequences to format your console output which works even on windows.
通俗的说就是,在控制台中输出彩色文字。所有Bukkit和基于Bukkit的服务端都使用了这个包用于在控制台输出显示包含颜色代码的信息。我专门去jansi的repository看了看(地址),README里最后一段是:
Windows XP Users

The JNI library that JANSI uses depends on the "Microsoft Visual C++ 2008 SP1 Redistributable" You can get a free copy from MS at:
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=5582
大意是,Windows的用户要想正常使用这个库,必须安装“Microsoft Visual C++ 2008 SP1 Redistributable“这个程序,才能正常使用。
所以之前我感到奇怪的”我自己电脑上能正常运作的服务端,放到机房上就打不开了“就是因为,我自己电脑上除了MC还有各种其他程序,有些程序本来就需要Microsoft Visual C++ Redistributable,所以已经安装了这个运行库了,不会出现问题(还有些系统映像会内置在里面)。而机房是刚装的系统,而且就运行个服务端,自然不会想到需要啥运行库啦。



解决方案1 【推荐】
必须要安装”Microsoft Visual C++ 2008 SP1 Redistributable“?那就安装呗。不过需要注意的一点是,必须安装与你的Java位数相同版本的运行库。意思就是,如果你的Java是32位的,那么你必须安装32位的运行库才有效。如果你的Java是64位的,就必须安装64位的运行库。如果你不能肯定你的Java是几位,那就两个都装了吧。。没关系。其他很多程序都会用到这个运行库的。
官方下载地址:
Microsoft Visual C++ 2008 Redistributable Package (x86)  【32位下载地址】
Microsoft Visual C++ 2008 Redistributable Package (x64)  【64位下载地址】
重复:如果你的Java是32位的,那么你必须安装32位的运行库才有效。如果你的Java是64位的,就必须安装64位的运行库。如果你不能肯定你的Java是几位,那就两个都装了吧



解决方案2
关闭服务器,在服务器的启动脚本的启动命令的“-jar jar名字”参数之后(注意一定得放在-jar之后,否则就变成JVM参数了)添加程序参数" --nojline"
如果你看不懂上面那就话,那就在启动命令”最后面“添加吧。这样总看得懂吧。。还是看不懂就看下面的梨子,啊呸,例子吧
比如如果你的启动脚本原来是
  1. @echo off
  2. java -Xmx2G -jar spigot-1.7.2.jar
  3. pause
复制代码
那么需要变为
  1. @echo off
  2. java -Xmx2G -jar spigot-1.7.2.jar --nojline
  3. pause
复制代码
这个方法我没试过,不保证一定能行
但这方法有个副作用:因为其原理是直接禁用jansi,所以控制台会变成黑白的,彩色代码会无效。


以后再在问答版遇到这问题,直接找出这帖子把链接发上去就好。翻了半天问答版发现这种问题居然没一个人答对。。

来自群组: 上古之石美工工作组

Bryan33
打破0回复

话说我从来没遇到这个问题

andylizi
a390807154 发表于 2016-2-11 11:27
打破0回复

话说我从来没遇到这个问题

一般在家用机上不会有这个问题,,因为其他很多应用都需要这个运行库。这问题一般发生在服务器卖主单独给分出一个除了java啥都没装的虚拟机

云闪
现在我知道有的服务端蹦出这玩意是什么意思了_(:_」∠)_不过我出现了这个仍然能启动服务器,或许水龙头要求不严_(:_」∠)_

再问个问题_(:_」∠)_为啥同是水龙头核心,有的可以输出彩色文字有的却不行呢qwq(话说跟启动的bat有关吗)

andylizi
splt 发表于 2016-2-12 07:40
现在我知道有的服务端蹦出这玩意是什么意思了_(:_」∠)_不过我出现了这个仍然能启动服务器,或许水龙头要求 ...

1、如果在启动命令最后面加入了 --nojline 参数,那么服务器就会不再使用jansi(彩字)和jline(控制台输入组件),这样就不需要那个运行库的支持,也就能正常启动服务器了。但是副作用就是:不能再显示彩色文字,控制台的输入提示符“> "换为Java自带的输入方法
2、如果没有那个运行库,有两种情况:无法开服,启动时出错 / 开服时出现错误提示但可以正常开启,无法显示彩字

云闪
andylizi 发表于 2016-2-12 14:35
1、如果在启动命令最后面加入了 --nojline 参数,那么服务器就会不再使用jansi(彩字)和jline(控制台输 ...

如果没加--nojline参数且没出现这个错误提示_(:зゝ∠)_仍然没有彩字_(:зゝ∠)_是啥问题= ̄ω ̄=

andylizi
splt 发表于 2016-2-12 18:29
如果没加--nojline参数且没出现这个错误提示_(:зゝ∠)_仍然没有彩字_(:зゝ∠)_是啥问题= ̄ω ̄= ...

这个似乎没见过,,服务器所在的平台?
还有你是怎么知道没有彩字的,,?本该有的地方没有么?

云闪
andylizi 发表于 2016-2-12 19:16
这个似乎没见过,,服务器所在的平台?
还有你是怎么知道没有彩字的,,?本该有的地方没有么? ...

都是在我的电脑上测试的_(:зゝ∠)_
嗯嗯没错,本该有的地方没有_(:зゝ∠)_另一个服务端就能显示彩字_(:зゝ∠)_偏偏那个不行_(:зゝ∠)_

Deater
andylizi 发表于 2016-2-12 14:16
这个似乎没见过,,服务器所在的平台?
还有你是怎么知道没有彩字的,,?本该有的地方没有么? ...

win sever 2012R2 在控制台打字变成其他字 无法正常输入文字什么情况 其他地方无法输入中文 需要复制黏贴过去

andylizi
Deater 发表于 2016-2-15 14:38
win sever 2012R2 在控制台打字变成其他字 无法正常输入文字什么情况 其他地方无法输入中文 需要复制黏贴 ...

首先检查一下控制台的编码(在cmd窗口的标题栏上右键——属性),看看是不是默认的GBK?
如果不是,问百度怎么解决。如果是,还有这个情况,,,并且不止MC服务端,在命令提示符里输入任何中文都不行,那这是系统的锅问百度去。如果只是MC服务端,在启动参数最后面添加 -nojline
哦对了,检查下你的输入法,有些输入法无法正常在cmd里打字

Deater
andylizi 发表于 2016-2-15 09:44
首先检查一下控制台的编码(在cmd窗口的标题栏上右键——属性),看看是不是默认的GBK?
如果不是,问百 ...

其他一切正常 试试添加-nojline  这个先

happyvalley
说白就是安装VC++运行库

这个貌似在所有的Cauldron与MCPC+的下载帖子都有写吧...

andylizi
happyvalley 发表于 2016-2-15 15:32
说白就是安装VC++运行库

这个貌似在所有的Cauldron与MCPC+的下载帖子都有写吧... ...

然而并没有,,至少我没见到过

happyvalley
andylizi 发表于 2016-2-15 15:43
然而并没有,,至少我没见到过

但是那些制作整合包的没有一个人写了要安装

芒果苦力怕
我研究过了
在启动脚本下加入
if exist "plugins\RestartEvolution\restart.mcs" goto MAIN
if not exist "plugins\RestartEvolution\restart.mcs" goto END
这两条就可以了