[英]Java simple networking program works in Eclipse, not in terminal
我用Java编写了一个简单的网络程序,该程序从服务器端的文本文件中读取文本并将其发送给客户端。 客户端程序将文本写入客户端计算机上的文本文件。
我正在一台计算机(本地主机)上测试该程序,它可以在Eclipse中运行,但是当我尝试从终端运行该程序时,在服务器端会出现运行时错误。 从服务器的文本文件中读取文本的扫描仪似乎存在问题,但是我要确定。
这是错误:
java.util.Scanner.myCoreNext(libgcj.so.10)处的java.util.regex.Matcher.toMatchResult(libgcj.so.10)处的线程“ main”中的java.lang.NullPointerException。 myPrepareForNext(libgcj.so.10)位于java.util.Scanner.myNextLine(libgcj.so.10)位于java.util.Scanner.hasNextLine(libgcj.so.10)位于pkg.TextTransmitServer.sendText(TextTransmitServer.java:50 )在pkg.TextTransmitServer.main(TextTransmitServer.java:26)
仔细检查两种情况下您是否使用相同的输入文件。 打开文件时,您是否使用标准路径? 如果文件不同,则可以解释为什么一个正则表达式可以使用一个而不使用另一个。
请在问题中添加两点。 1)有关如何打开文件的代码段,以及2)正则表达式用法的代码段。 有趣的观察:为什么java.util.Scanner.hasNextLine(libgcj.so.10)
使用正则表达式? 你必须通过吗?
不知道为什么要使用“ hasNextLine()”。 将分隔符设置为行分隔符后,尝试使用hasNext()。 有关更多示例,请参见此页面 。
private static void readFile(String fileName) {
try {
Scanner scanner = new Scanner(new File(fileName));
scanner.useDelimiter
(System.getProperty("line.separator"));
while (scanner.hasNext()) {
System.out.println(scanner.next());
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
hasNextLine()
使用的定界符为null
或要扫描的输入行为null
。 抛出NPE时,从文件中打印出有害的输入行。 没有您的代码,这只是黑暗中的一枪,但是像这样:
[在pkg.TextTransmitServer.sendText(TextTransmitServer.java:50)或其附近)
try {
String currentLine = null;
String previousLine = null;
while (scanner.hasNext()) {
previousLine = currentLine;
currentLine= parseLine(scanner.next());
}
}
catch (NullPointerException npe) {
System.out.println("previous line: " + previousLine);
System.out.println("current line: " + currentLine);
npe.printStackTrace();
}
作为指向问题根源的指针,您可以通过在命令行中添加以下参数,从命令行调试Java应用程序:
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
然后使用8000端口将eclipse连接到远程调试器。 这将帮助您轻松找到问题的根源。
确保扫描仪可以正确处理不同的字符集/控制台。 可能是两个设置之一使用了例如UTF-8,因此可能会看到单个字符有多个字节(或者,如果您的协议编码字符串的长度,则可能是相反的)。
好的,首先,因为@Kelly状态检查两种情况下您是否正在读取同一文件。
现在,我感觉到您将整个项目从Sun JVM(台式机上的Eclipese)迁移到了另一个JVM(从您的例外情况来看,很明显,您正在Linux(默认JVM)上运行)。 这可能是由于该JVM中的错误所致
考虑使用Sun的JVM代替GCJ(Linux上的默认JVM)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.