- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试创建一个程序来运行 craftbukkit.jar 并处理输入/输出流,但它不起作用。
这是我的代码,我做错了什么?
package info.nordbyen.bukkitwrapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class BukkitWrapper
{
private final static String PATH_TO_JAVA_PROGRAM = "C:\\Program Files\\Java\\jre7\\bin";
private final static String NAME_OF_JAVA_PROGRAM = "java.exe";
private final static String PATH_TO_CRAFTBUKKIT_FILE = "C:\\l0lkj\\bukkit\\1.7.10_wrapper_tester";
private final static String NAME_OF_CRAFTBUKKIT_FILE = "craftbukkit-1.7.10-R0.1-20140808.005431-8";
private static Process process = null;
private static BufferedReader in = null;
private static OutputStream os = null;
private static Scanner scanner;
public static void main( String[] args )
{
scanner = new Scanner( System.in );
System.out.println( "Starter..." );
ProcessBuilder processBuilder = new ProcessBuilder( PATH_TO_JAVA_PROGRAM + "\\" + NAME_OF_JAVA_PROGRAM, "-jar", PATH_TO_CRAFTBUKKIT_FILE + "\\" + NAME_OF_CRAFTBUKKIT_FILE ); //,"--nojline"
try
{
process = processBuilder.start();
}
catch ( IOException e )
{
System.out.println( "ERROR!" );
System.out.println( e );
System.exit( -1 );
}
if( process == null )
{
System.out.println( "ERROR!" );
System.out.println( "process is null" );
System.exit( -1 );
}
InputStream is = process.getInputStream();
os = process.getOutputStream();
if( is == null )
{
System.out.println( "ERROR!" );
System.out.println( "is is null" );
System.exit( -1 );
}
if( os == null )
{
System.out.println( "ERROR!" );
System.out.println( "os is null" );
System.exit( -1 );
}
in = new BufferedReader( new InputStreamReader( is ) );
inputHandler();
outputHandler();
}
private static void inputHandler()
{
Thread thread = new Thread()
{
public void run()
{
while( true )
{
String line = scanner.nextLine();
try
{
os.write( line.getBytes() );
}
catch ( IOException e )
{
System.out.println( "ERROR!" );
System.out.println( e );
System.exit( -1 );
}
}
}
};
thread.start();
}
private static void outputHandler()
{
while( true )
{
String line = null;
try
{
line = in.readLine();
}
catch ( IOException e )
{
System.out.println( "ERROR!" );
System.out.println( e );
}
System.out.println( currentTime() + line );
}
}
private static String currentTime()
{
SimpleDateFormat sdf = new SimpleDateFormat( "[yyyy-mm-dd hh:mm:ss] -> " );
Date now = new Date();
String date = sdf.format( now );
return date;
}
}
我没有收到任何错误,但输入始终返回 null。这是控制台:
[2014-04-12 04:04:06] -> null
[2014-04-12 04:04:06] -> null
[2014-04-12 04:04:06] -> null
[2014-04-12 04:04:06] -> null
[2014-04-12 04:04:06] -> null
Etc. Etc.
谢谢你的帮助:)
编辑:对于遇到同样问题的人,只需添加
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput();
processBuilder.redirectInput();
正如卢克·伍德沃德在回答中所说,在创建流程之前。
对于 null
问题,我只是添加了一个简单的 if
语句:
if( line.length() >= 1 )
{
System.out.println( Div.currentTime() + line );
}
我在向进程写入文本时仍然遇到问题。谁知道如何解决这个问题?
编辑2:现在一切正常:)
最佳答案
我有几个建议:
(1) 在创建进程之前调用 processBuilder.redirectErrorStream(true);
,将进程的标准错误重定向到其标准输出。该进程可能会将消息写入其标准错误,但如果您只读取标准输出,则可能看不到它们。
(2) 当 BufferedReader 的 readLine()
返回 null
时,底层流已到达文件末尾。尝试继续阅读是没有意义的,因为您只会得到更多的 null
。一旦调用 readLine()
返回 null,您就应该
.break
跳出outputHandler
中的while
循环
我不能保证这些建议能够完全解决您的问题,但它们至少应该帮助您找出程序无法运行的原因。
关于java - 我的 ProcessBuilder 代码不起作用。从该程序运行 craftbukkit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266408/
我正在制作一个 Craftbukkit 插件,它在玩家计数列表中包含一条消息,例如 HIVEmc 或 Omega Realm。我正在 Ecplise 中编码并使用 ProtocolLib v3.2.0
我正在为 CraftBukkit Beta Build 1.7.2 R0.3 制作一个简单的 /heal Bukkit 插件。 (我是 java 的新手。)我在 Eclipse 中编程。我收到一条错误
我英语不好,但我必须询问这个错误,因为我无法在任何地方修复它。 我正在制作我的世界插件来返回到玩家选择的位置。 但我无法修复这个错误... 这是整个错误日志 [10:57:29] [Server th
我对 UNIX 相当陌生,我正在尝试使用 CraftBukkit 来运行我的 Minecraft 服务器。 这就是我所做的: $ git clone git://github.com/Bukkit/C
我尝试创建一个程序来运行 craftbukkit.jar 并处理输入/输出流,但它不起作用。 这是我的代码,我做错了什么? package info.nordbyen.bukkitwrapper; i
我正在尝试使用选项 -Djava.ext.dirs=lib 启动 craftbukkit但是,当我尝试与客户端连接时,出现错误。 我从以下启动命令开始: java -Xms1024M -Xmx1024
我是一名优秀的程序员,十分优秀!