管道java程序时出错

时间:2015-06-23 15:56:58

标签: java piping drjava

我有一个类RandomSeq打印“args [0]”随机双打和一个打印平均StdIn的类。我正在使用DrJava编写代码和编译。我已经下载了StdIn和out库并将它们放在我的类的同一个文件夹中。我正在学习Java。

第一个问题出现在DrJava的“交互”部分。当我写DELETE FROM hotspot, laptop WHERE hotspot.user_id= '2EA81' and laptop.id= hotspot.hotspot_ID 而不是创建文本文件时,它会打印输出。为什么呢?
然后我在Windows命令行中键入了相同的命令。它成功创建了txt文件。

现在我想将RandomSeq 10的输出传递给Average的输入。写java RandomSeq 10 > data.txt 在DrJava的Interactions部分会导致有趣的行为。在cmd中编写它会打印以下错误:

java RandomSeq 10 | java Average

即使Exception in thread "main" java.lang.NoClassDefFoundError: StdIn at Average.main(Average.java:7) Caused by: java.lang.ClassNotFoundException: StdIn 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) ... 1 more 也显示相同的错误。为什么?

java Average < data.txt

2 个答案:

答案 0 :(得分:2)

StdIn不是来自内置的Java库。它是包含在stdlib.jar文件中的第三方库的一部分,可以从here下载。

JAR文件的路径必须位于命令行-CLASSPATHjavac调用的java选项中。 this page使用标准库部分向您展示了如何执行此操作; -cp选项只是-CLASSPATH的简写。学习如何将库放到CLASSPATH上是非常重要的,因为您最终会使用Java一直这样做。

您的Average.java代码还必须import StdIn课程。由于StdIn不在命名包中,因此您只需在代码顶部说import StdIn;

或者,您可以使用System.in,而不是此库。您可能还需要更高级别的流构造。 Here's a nice example

答案 1 :(得分:1)

这是related question on StdInStdIn不是标准的java库,正如您提到的那样,您正在遵循普林斯顿课程,课程提供了StdIn.java,您可能还需要编译StdIn.java,命令javac StdIn.java生成StdIn.class文件,这将解决Class not Found Exception。 (第二期)

关于你在DrJava中编写java RandomSeq 10 > data.txt的问题(我要求澄清,因为我没有意识到DrJava是一个IDE,认为它是一本书),是因为Interactions部分最有可能直接为您的程序提供输入,这意味着它会将您在args[]函数中输入的内容main传递给system.out.println

打印输出是因为您在代码中调用data.txt,而DrJava只接受该输出并将其打印到屏幕上,并且不会传输到您的java RandomSeq 10 | java Average文件。我建议您使用课程材料,这需要管道之类的东西在命令行中与您的程序进行交互。

最后java RandomSeq 10与执行java Average相同,然后将该输出转换为java Average < data.txt,第二个命令与您StdIn相同,错误是因为你如何管道它,只是因为.class没有作为编译的TableViewController文件出现。