3

我在命令提示符下使用自定义 jar 库(来自http://algs4.cs.princeton.edu/home/的 algs4.jar/stdlib.jar)时遇到问题。我将这些库添加到 IntelliJ 类路径设置(项目结构 -> SDKs -> 类路径)中,并且能够毫无问题地使用它们的类。

但是,我也希望能够在命令提示符下使用这些库。尽管我在 Windows 设置中没有设置 CLASSPATH 变量,但在使用标准 java 库时,我已经能够在 cmd 中使用 javac/java 而没有问题。(可能是因为 IntelliJ 在每次启动/编译时为所有标准库设置了 CLASSPATH 以在系统范围内工作)。但是,即使将 2 个 jars 添加到 IntelliJ 类路径设置中,我也无法在 cmd 中使用“javac”。然后,我在 Windows 设置中创建了 CLASSPATH 变量,并将罐子添加到其中。在此之后,我能够毫无问题地使用 javac 进行编译。但是,当我尝试在 cmd 中运行程序时,我得到了这个:

“错误:无法找到或加载主类”。

每当我使用任何 jar 库(包括标准库)时,我都会收到此错误,在设置 Windows CLASSPATH 之前我没有遇到任何问题。我想一旦我设置了自己的 CLASSPATH 就会覆盖由 intelliJ 设置的类路径。当我删除 CLASSPATH 时,我再次能够在 cmd 中编译和运行标准库,但不能编译和运行 2 个自定义库。

请帮忙!

4

2 回答 2

1

正如这篇文章指出的那样,在这种特殊情况下,问题可能是由于库中的类“......放置在默认包(无包声明)和现代版本的 java(至少 7 8) 禁止引用默认包中的类,除非你自己的类也在默认包中。”

为了解决这个问题,我从 jar 中提取了 .java 文件(将文件类型从 .jar 更改为 .zip 并解压到一个目录)。我编了一个包名“com.sedge.stdlib”,并根据需要修改了 .java 文件。例如,我通过在顶部放置一个包指令从 algs4 修改了 StdLib.java 类:

package com.sedge.stdlib;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Locale;

/**
 *  <i>Standard output</i>. This class provides methods for writing strings
 *  and numbers to standard output.
 *  <p>
 *  For additional documentation, see <a href="http://introcs.cs.princeton.edu/15inout">Section 1.5</a> of
 *  <i>Introduction to Programming in Java: An Interdisciplinary Approach</i> by Robert Sedgewick and Kevin Wayne.
 *
 *  @author Robert Sedgewick
 *  @author Kevin Wayne
 */
public final class StdOut {
. . .
于 2015-06-04T20:29:16.520 回答