我正在尝试在终端中运行它并编译,创建.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];
}
}
答案 0 :(得分:4)
通常你会创建一个这样的目录结构:
src/
stackdemo/
ArrayStackDemo.java
StackInt.java
bin/
然后运行编译器生成类文件
javac -s src -d bin src/stackdemo/*.java
在bin
目录
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
。