2014-02-25 108 views
2

我试图在终端运行它,它编译,创建.class文件,但不会运行。该代码按照Netbeans(在Windows中)按计划运行并执行,但不会在终端中为我的VirtualBox运行。我得到的错误是它无法找到主类。我的代码编译,但不会在终端运行

java -cp . stackdemo.ArrayStackDemo 

如果要编译,然后创建一个jar文件,首先确保的jar文件中有一个明显的运行java -jar <yourjar>前:

package stackdemo; 

public class ArrayStackDemo { 

    //Demo 
    public static void main(String args[]) { 
     StackInt demoStack = new StackInt(); 
     for (int i = 0; i < demoStack.size(); i++) { 
      demoStack.push(i); 
      System.out.println(demoStack.pop()); 
     } 
    } 
} 

package stackdemo; 
import java.util.Arrays; 
import java.util.EmptyStackException; 

public class StackInt { 
    //Instance variables 
    private int[] numberStack; 
    int topOfStack = -1; //Empty stack 
    private int capacity; 
    private final int INITIAL_CAPACITY = 10; 

    //Default constructer 
    public StackInt() { 
     capacity = INITIAL_CAPACITY; 
     numberStack = new int[capacity]; 
    } 

    //Size method 
    public int size() { 
     return capacity; 
    } 

    //Empty method 
    public boolean empty() { 
     if (topOfStack == -1) { 
      return true; 
     } 
     return false; 
    } 

    //Push method 
    public int push(int obj) { 
     if (topOfStack == numberStack.length - 1) { 
      reallocate(); 
     } 
     topOfStack++; 
     numberStack[topOfStack] = obj; 
     return obj; 
    } 

    //Reallocate method 
    public void reallocate() { 
     capacity = 2 * capacity; 
     numberStack = Arrays.copyOf(numberStack, capacity); 
    } 

    //Pop method  
    public int pop() { 
     if (empty()) { 
      throw new EmptyStackException(); 
     } 
     return numberStack[topOfStack--]; 
    } 

    //Peek method 
    public int peek() { 
     if (empty()) { 
      throw new EmptyStackException(); 
     } 
     return numberStack[topOfStack]; 
    } 
} 
+0

也许愚蠢,但你想运行ArrayStackDemo或StackInt吗? –

+5

你是如何启动应用程序?给我们你正在执行的命令,告诉我们你在哪个目录中,以及类文件在哪里。 –

+0

删除软件包stackdemo;在这两个编码。 – Sathesh

回答

4

通常你创建一个目录结构是这样的:

src/ 
    stackdemo/ 
    ArrayStackDemo.java 
    StackInt.java 
bin/ 

然后运行编译器生成的类文件

javac -s src -d bin src/stackdemo/*.java 

这在bin在适当的位置创建的.class文件目录

bin/ 
    stackdemo/ 
    ArrayStackDemo.class 
    StackInt.class 

然后你可以执行exec使用完整的类名(<package>.<classname>

java -cp bin stackdemo.ArrayStackDemo 

这可能会出现麻烦的UTE主类 - 而是建立工具已为处理这个问题。在java世界中,通用工具是Maven,它在平滑编译的东西(以及更多)上引入了依赖管理。许多IDE支持这些类型的项目,并且能够独立于IDE构建,我强烈建议使用它。

+0

工作完美!谢谢。 – Nostradonis

+0

你能告诉我什么是-s和-d吗?我猜测-cp编译并运行? – Nostradonis

+0

'java -help','java -help'解释这些参数 - 简单地说'-s'指定源路径(源位于哪里),'-d'指定目标路径(应该放置.class文件的位置) 。 '-cp'是类路径选项。 –

0

从包含名为stackdemo该文件夹中的文件夹试试这个。这个清单在罐子里应该叫做META_INF/MANIFEST.MF。这是一个纯文本文件,至少包含行Main-Class: stackdemo.ArrayStackDemo

+0

这对我无效 – Nostradonis