我有一个 Main* 类,它包含声明到名为 mainPkg 的包中的 main() 方法。 *
现在,我使用一个ANT脚本通过Javac来执行编译,这个工具:
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<echo>INTO compile TASK</echo>
<echo>BASE DIR: ${basedir}</echo>
<echo>CLASSPATH: ${basedir}\lib\ojdbc6.jar</echo>
<javac srcdir="src/mainPkg/" destdir="build/classes">
<classpath>
<fileset refid="classpath.compile"/>
</classpath>
</javac>
</target>
好的,它可以正常工作,并在此目录(位于项目根目录中)内创建编译的 Main.class 文件: build / classes /
mainPkg /
(最后一个目录具有程序包名称)
好的,现在我的疑问是:为什么我进入 build / classes / 文件夹然后在这里执行:
java mainPkg.Main
它确实有效,实际上我获得了此输出(在某些时候有例外,但这是另一个与我目前要求的问题无关的问题):
C:\Projects\edi-sta\build\classes>java mainPkg.Main
Hello World !!!
0
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at mainPkg.Main.main(Unknown Source)
但是,如果我进入 build / classes / mainPkg / 目录(程序包),它将无法正常工作,并且出现 “无法找到或加载主类”
错误消息?
事实上:
Directory di C:\Projects\edi-sta\build\classes\mainPkg
12/02/2015 17:39 <DIR> .
12/02/2015 17:39 <DIR> ..
12/02/2015 17:39 1.190 Main.class
1 File 1.190 byte
2 Directory 8.091.906.048 byte disponibili
C:\Projects\edi-sta\build\classes\mainPkg>java Main
Errore: impossibile trovare o caricare la classe principale Main
您能解释一下为什么会这样吗?
特纳克斯
如果您在源文件中注意到,则有一个Main.java的package语句,如下所示
package mainPkg;
public class Main{
}
进行编译时,是说我的Main
课程有一个名为的名称空间mainPkg
。现在,您已经为类定义了名称空间,任何访问尝试都Main
应该具有名称空间前缀,就像mainPkg.Main
我们通常称为“完全合格的类名”一样。
在进行构建/类和调用时java mainPkg.Main
,JVM将首先检查mainPkg
当前目录中是否存在子文件夹。既然已经存在,它就可以进入内部并找到Main
,验证完全限定的类名是否与我们在java命令中提供的名称匹配,如果相同,它将加载您的类并执行main()。
当您java mainPkg.Main
从build / classes / mainPkg
运行相同的文件时,这次mainPkg中没有名为mainPkg的子文件夹,因此它将引发您所看到的错误。
希望这是有道理的:)
我是java编程语言的新手。我做了一个包名包。其中包含两个java类A. java和B. java。我用的是jdk1.5和tomcat。我想创建一个A类型的对象,并将其放在B. java中。下面是我如何试图做到这一点,但得到两个错误消息。 包装; A.java B.java Jdk1。5、tomcat和package pack位于下面的目录中 D:\java 下面是我编译A.java和B.java
问题内容: 我宣布了以下课程 当我编译并运行它时,它运行良好并打印输出“ done”。即使我声明它在“ package a”中,也具有相同的行为; 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” A.main(),它将如何看到A类本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 问题答
问题内容: 我写了下面的代码 因此,当我运行它时,它可以正常运行并打印输出“ Hello”。 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” Hello.main(),它将如何看到类A本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 并且,如果JVM能够看到所有类和方法,因为它本身就是
我正在学习网络驱动程序,我已经使用TestNg创建了一个项目。我的包中有几个类在src文件夹下。没有类包含公共静态空main(......)。即[入口点] 我的问题是: 我们可以通过eclipse为这样的项目创建Runnable/Execable jar文件吗[没有main方法的项目]。我在很多网站上搜索了,但不幸的是没有得到解决方案。 请建议我一些链接或我们可以做到这一点的方式。
问题内容: ABstractMethodError的可能原因是什么? 线程“ pool-1-thread-1”中的异常java.lang.AbstractMethodError: 问题答案: 简单的答案是这样的:一些代码试图调用一个声明的方法。抽象方法没有主体,无法执行。由于您提供的信息很少,因此我无法真正详细说明如何发生这种情况,因为编译器通常会遇到此问题- 如此处所述,这意味着该类必须在运行时
当我执行: 对于下面的程序,为什么调用超类A的main?据我所知,静态方法属于类级别。