我的代码已编译,但不会在终端中运行

时间:2014-02-25 16:38:42

标签: java

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

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];
    }
}

2 个答案:

答案 0 :(得分:4)

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

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

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

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

bin目录

中的适当位置创建.class文件
bin/
  stackdemo/
    ArrayStackDemo.class
    StackInt.class

然后,您可以使用完全限定的类名(<package>.<classname>

执行主类
java -cp bin stackdemo.ArrayStackDemo

这可能看起来很麻烦 - 但是已经创建了构建工具来处理这个问题。在java世界中,常用工具是Maven,它将依赖关系管理置于简单编译的东西之上(以及更多)。许多IDE支持这些类型的项目,并且能够独立于IDE构建,我强烈推荐它。

答案 1 :(得分:0)

从包含名为stackdemo的文件夹的文件夹中尝试此操作:

java -cp . stackdemo.ArrayStackDemo

如果您正在编译然后创建一个jar文件,请首先确保jar文件在运行java -jar <yourjar>之前有一个清单。清单应该在jar中调用META_INF/MANIFEST.MF。它是一个纯文本文件,至少包含行Main-Class: stackdemo.ArrayStackDemo