导入自定义的Java类(Import custom Java class)

2019-07-04 08:35发布

我是新来的Java,我已经在网上解决办法环顾四周,但没有似乎工作。 请帮我。

我有两个文件。 其中之一是,它包含的主要功能的Java文件。 在里面:

...
VaporVisitor visitor = new VaporVisitor();
...

有了这个命令,我想创建一个新的对象VaporVisitor ,这是被称为一个独立的文件中的类VaporVisitor.java 。 但是,Java不承认VaporVisitor是什么,大概是因为它不知道VaporVisitor.java存在(它是在同一目录)。 我试图让他们在同一包的一部分,在不同的封装和进口......和他们都失败了。 谁能给我任何指导?

谢谢!

编辑:这正是我在做什么,以及错误消息我得到:所以我有3个文件。 V2VM(我的主要功能),VaporVisitor,而且有几个自定义类提供的jar文件。 该jar文件是不是给我任何问题; 它试图获取Java承认VaporVisitor。

因此,在V2VM(main函数),我已经试过投入: import V2VM.java; 没有工作。 我试图把V2VM子文件夹名为VV,加入package vv; 到VaporVisitor,放在V2VM.java import vv.*但也不能工作。

对于编译,我试过javac -classpath [the jar file].jar V2VM.java

它给我的错误:

V2VM.java:15: cannot find symbol
symbol  : class VaporVisitor
location: class V2VM
VaporVisitor visitor = new VaporVisitor();
^
V2VM.java:15: cannot find symbol
symbol  : class VaporVisitor
location: class V2VM
VaporVisitor visitor = new VaporVisitor();
                           ^

当我运行javacc我在同一目录V2VM,这也是在其他两个文件的位置。 我试图把V2VM和VaporVisitor在同一个包,但也不能工作。 因此,他们都没有任何包装的一部分,现在...

编辑2:VaporVisitor和V2VM源代码

V2VM.java:

package vv; //whether I put this or not, it doesn't work

//this stuff was provided, and is related to importing contents of the jar file; don't think this is the problem
import cs132.util.ProblemException;
import cs132.vapor.parser.VaporParser;
import cs132.vapor.ast.VaporProgram;
import cs132.vapor.ast.VBuiltIn.Op;

import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintStream;

import vv.VaporVisitor;  //whether I put this or not, it doesn't work

public class V2VM{

public static void main(String [] args){

VaporProgram vp = parseVapor(System.in, System.err);
VaporVisitor visitor = new VaporVisitor();

for(int i=0; i<vp.functions.length; i++){
for(int j=0; j<vp.functions[i].body.length; j++){
    vp.functions[i].body[j].accept(parameter, visitor);
    }
}
}

public static VaporProgram parseVapor(InputStream in, PrintStream err){
  ...
}

对于VaporVisitor.java:

package vv;

public class VaporVisitor extends VInstr.VisitorPR<Parameter_Type, Return_Type, RuntimeException>{
   ....
}

所有的3个文件是在同一目录vv

Answer 1:

好。 所以首先,你从来没有通过附加指在Java类.java至名归。 第二:为了编译使用另一个类B中的A类,B类必须进行编译,并在类路径。 或者你必须在同一时间编译A和B。

所以,你应该有以下结构:

project
   lib
      someFile.jar
   src
      vv
         V2VM.java
         VaporVisitor.java
   classes

这两个类都应该开始:

 package vv;

有没有必要进口V2VM在VaporVisitor反之亦然,因为它们是在同一个包。

要编译的文件,你应该在项目目录,并使用以下命令:

javac -cp lib/someFile.jar -d classes src/vv/V2VM.java src/vv/VaporVisiotr.java

这将编译两个文件一次,并且把他们的编译的类文件的项目/类:

project
   classes
      vv
         V2VM.class
         VaporVisitor.class

你把jar文件中,因为类从这个jar文件编译使用类的类路径。

然后,运行类,你需要有两个jar文件,并在类路径中的类目录。 而主类的完全quelidied名字是vv.V2VM 。 所以命令

java -cp lib/someFile.jar:classes vv.V2VM

如果您使用的是Windows,则必须使用\来代替/ ,和; 而不是:

如果你想先编译VaporVisiotr,然后V2VM,你可以。 但随后你就必须做到以下几点:

javac -cp lib/someFile.jar -d classes src/vv/VaporVisitor.java

这只编译VaporVisiotr,并把它的类文件中的project/classes 。 然后,你需要编译V2VM,这取决于VaporVisitor。 因此,编译VaporVisitor类必须在类路径。 所以命令

javac -cp lib/someFile.jar:classes -d classes src/vv/V2VM.java

如果你决定把VaporVisitor在另一个包( vv.foo为例),那么你就需要的结构如下:

project
   lib
      someFile.jar
   src
      vv
         V2VM.java
         foo
             VaporVisitor.java
   classes

该VaporVisitor.java需要先从

package vv.foo;

而V2VM.java文件需要有

package vv;
import vv.foo.VaporVisitor;

阅读关于包教程 。



文章来源: Import custom Java class
标签: java import