这里是我的代码:我看不到NSTask输出 - Objective-C的JAVA
NSTask *setupTask = [NSTask new];
[setupTask setLaunchPath:@"/bin/sh"];
[setupTask setArguments:[NSArray arrayWithObject:@"/applications/jarvis/brain/server.sh"]];
[setupTask setCurrentDirectoryPath:@"/"];
NSPipe *outputPipeSetup = [NSPipe pipe];
[setupTask setStandardInput:[NSPipe pipe]];
[setupTask setStandardOutput:outputPipeSetup];
[setupTask launch];
NSTask *aliceTask = [NSTask new];
[aliceTask setLaunchPath:@"/usr/bin/java"];
[aliceTask setArguments:[NSArray arrayWithObjects:@"-classpath", @"/applications/jarvis/brain/", @"-Xms64m", @"-Xmx128m", @"org.alicebot.server.net.AliceServer", nil]];
NSPipe *aliceInputPipe = [NSPipe pipe];
[aliceTask setStandardInput:aliceInputPipe];
NSPipe *aliceOutputPipe = [NSPipe pipe];
[aliceTask setStandardOutput:aliceOutputPipe];
[aliceTask launch];
NSMutableString *outputString = [NSMutableString string];
while ([outputString rangeOfString:@"Jarvis>"].location == NSNotFound) {
[outputString appendString:[[[NSString alloc] initWithData:[[aliceOutputPipe fileHandleForReading] readDataToEndOfFile] encoding:NSUTF8StringEncoding] autorelease]];
}
,但outputString返回任何内容,它得到的卡在while循环。这里是server.sh文件:
echo Starting Jarvis Program D.
ALICE_HOME=.
SERVLET_LIB=lib/servlet.jar
ALICE_LIB=lib/aliceserver.jar
JS_LIB=lib/js.jar
# Set SQL_LIB to the location of your database driver.
SQL_LIB=lib/mysql_comp.jar
# These are for Jetty; you will want to change these if you are using a different http server.
HTTP_SERVER_LIBS=lib/org.mortbay.jetty.jar
PROGRAMD_CLASSPATH=$SERVLET_LIB:$ALICE_LIB:$JS_LIB:$SQL_LIB:$HTTP_SERVER_LIBS
java -classpath $PROGRAMD_CLASSPATH -Xms64m -Xmx128m org.alicebot.server.net.AliceServer $1
疯了!你为什么从编译目标c调用Java? – 2010-08-17 19:16:13
如果我要解释它需要几个小时!:D但简单地说,我想为ALICE AI制作一个客观的GUI。 AIML解释器是用java编写的。在终端中,我只是启动.sh文件,它加载了ALICE并为我提供了一个用于userinput和Alice响应的字段。我稍后在我的代码中解析这个。 – objectiveccoder001 2010-08-17 20:02:26