<thinking in =“”java =“”>错误:找不到类:Explore.class

时间:2015-05-01 08:17:32

标签: java

我正在阅读Thinking in Java(第4版)一书,但在尝试这些例子时我遇到了例外。

主要课程:

enum Explore { HERE, THERE }

public class Reflection {
  public static Set<String> analyze(Class<?> enumClass) {
    print("----- Analyzing " + enumClass + " -----");
    print("Interfaces:");
    for(Type t : enumClass.getGenericInterfaces())
      print(t);
    print("Base: " + enumClass.getSuperclass());
    print("Methods: ");
    Set<String> methods = new TreeSet<String>();
    for(Method m : enumClass.getMethods())
      methods.add(m.getName());
    print(methods);
    return methods;
  }
  public static void main(String[] args) {
    Set<String> exploreMethods = analyze(Explore.class);
    Set<String> enumMethods = analyze(Enum.class);
    print("Explore.containsAll(Enum)? " +
      exploreMethods.containsAll(enumMethods));
    printnb("Explore.removeAll(Enum): ");
    exploreMethods.removeAll(enumMethods);
    print(exploreMethods);

    OSExecute.command("javap Explore.class "); 
  }
}

OSExecute.java:

package net.mindview.util;
import java.io.*;

public class OSExecute {
  public static void command(String command) {
    boolean err = false;
    try {
      Process process =
        new ProcessBuilder(command.split(" ")).start();
      BufferedReader results = new BufferedReader(
        new InputStreamReader(process.getInputStream()));
      String s;
      while((s = results.readLine())!= null)
        System.out.println(s);
      BufferedReader errors = new BufferedReader(
        new InputStreamReader(process.getErrorStream()));
      // Report errors and return nonzero value
      // to calling process if there are problems:
      while((s = errors.readLine())!= null) {
        System.err.println(s);
        err = true;
      }
    } catch(Exception e) {
      // Compensate for Windows 2000, which throws an
      // exception for the default command line:
      if(!command.startsWith("CMD /C"))
        command("CMD /C " + command);
      else
        throw new RuntimeException(e);
    }
    if(err)
      //Here it throws the exception:
      throw new OSExecuteException("Errors executing " +
        command);
  }
}

输出:

----- Analyzing class Explore -----
Interfaces 
Base: class java.lang.Enum
Methods: 
[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, values, wait]
----- Analyzing class java.lang.Enum -----
Interfaces:
java.lang.Comparable<E>
interface java.io.Serializable
Base: class java.lang.Object
Methods: 
[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, wait]
Explore.containsAll(Enum)? true
Explore.removeAll(Enum): [values]
Error: cannot find class Explore.class
Exception in thread "main" net.mindview.util.OSExecuteException: 
    at net.mindview.util.OSExecute.command(OSExecute.java:35)
    at Reflection.main(Reflection.java:33)**

1 个答案:

答案 0 :(得分:1)

命令javap找不到类Explore。这个类在默认包中吗?您应该尝试让javap Explore.class在命令行上运行(可能修复类路径或包),它与您的代码无关。 --- Philipp Wendler

OSExecute.command(&#34; javap D:/eclipse_workspace/thinking/bin/Explore.class");