困扰了很久的一个问题

Ostroff 2010-02-06 12:12:30
//A.java文件
package com.xxj;
public class A {
public void printHelloWorld(){
System.out.println("Hello, World!");
}
}

//B.java文件
import com.xxj;
public class B {
public static void main (String[] args) {
A.printHelloWorld();
}
}

A.java跟B.java处于相同目录下,
A.java能通过编译,B.java编译不了,该怎么办才能让B通过编译?
我本意是想要运用到第三方jar包
...全文
549 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
billazw 2010-03-21
  • 打赏
  • 举报
回复
顶楼上诸位
Ark032425 2010-03-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ostroff 的回复:]
import com.xxj.A;
public class B {
public static void main (String[] args) {
A a = new A();
a.printHelloWorld();
}
}
能通过,
import com.xxj.*;
public class B {
public static void main (String[]……
[/Quote]
差不多 是 这个 了
Ostroff 2010-03-21
  • 打赏
  • 举报
回复
回复39楼:
java -classpath A.jar; com.test.B
还是运行不出来呀????
sqtmtd 2010-03-08
  • 打赏
  • 举报
回复
public void printHelloWorld(){
System.out.println("Hello, World!");
}

改成:
public static void printHelloWorld(){
System.out.println("Hello, World!");
}


在下面的B.java里就可以像你那样调用了.

调用其它类的方法,要先把调用的类实例化一下.
GOon_star 2010-03-05
  • 打赏
  • 举报
回复
顶下35楼 回复内容太短了!
hzllynnlynn 2010-03-04
  • 打赏
  • 举报
回复
package com.xxj;

public class A {

public static void main(String args[]){

System.out.println("Hello World!");

}
}


package com.xxj;

public class B {
public static void main(String[] args){

A a=new A();
a.main(args);


}



}
huhk 2010-03-04
  • 打赏
  • 举报
回复
B和A不在同一个包里呀。
Ostroff 2010-03-04
  • 打赏
  • 举报
回复
java -classpath A.jar; com.test.B
分号是什么作用啊?
TillPerfect 2010-03-03
  • 打赏
  • 举报
回复
lz,提醒下,我写的B类和你写的B类有差别,我的那个类有 写 package,但是你的没有。
所以,如果要对你的B类进行运行的话,就使用java -classpath A.jar; B
我试了你的代码,这样可以的。
唉,不知道你的问题究竟在哪里。。。
Ostroff 2010-03-03
  • 打赏
  • 举报
回复
引用 39 楼 tillperfect 的回复:
不知道lz有没有明白,反正我明白啦

总结下:
我写了两个类
Java code//Apackage com.xxj;publicclass A
{publicvoid print()
{
System.out.println("Hello World!");
}
}//Bpackage com.test;import com.xxj.A;publicclass B
{publicstaticvoid main(String[] args)
{
A a=new A();
a.print();
}
}
(1)编译A.java,命令  javac -d . A.java
(2)将A.class打成jar包,命令  jar cvf A.jar com
(3)编译B.java,命令  javac -classpath A.jar -d . B.java
(4)运行,命令  java -classpath A.jar; com.test.B

java -classpath A.jar; com.test.B
这里不太懂,也运行不出来。

很谢谢各位了,尤其是xixibudong,TillPerfect
Ostroff 2010-03-02
  • 打赏
  • 举报
回复
还是照样用java B才可以运行啊
Ostroff 2010-03-02
  • 打赏
  • 举报
回复
引用 30 楼 xixibudong 的回复:
没想到楼主如此纠结。
我们在引用jar包时一般都会放在特定的目录下,其中像楼主说的%JAVA_HOME%\jre\lib\ext\下,我们不把它们放在那些目录下就不能用吗?显然不是。那为什么楼主的以上的这个程序编译运行会有问题?答案其实很简单:classpath
JAVA虚拟机会自动加载特定目录下的class或jar文件,这不需要用户手动指定。如果用户要使用自定义目录下的jar文件就应该和指定class文件一样,用classpath去指定它。

假设A.java 和B.java都在同一文件目录下。
我们先用javac -d . A.java编译得到com\xxj\A.class
然后用jar cvf A.jar com得到A.jar
这时如果用javac B.java编译肯定出错,因为就算B.java和A.jar在同一目录下,编译程序也不知道哪里去找A这个类
用javac -classpath A.jar B.java就行了。

明白了的话就知道运行要B.class该怎么办了。

我用java -classpath A.jar B运行,运行不了
zm_hs 2010-03-02
  • 打赏
  • 举报
回复
public static void main (String[] args) {
A.printHelloWorld();
}
}
大哥,语法错了
py330316117 2010-03-02
  • 打赏
  • 举报
回复
然后我删除了编译A.java得到的com文件夹,再运行:
>javac B.java
提示找不到com.xxj包————为何?


你的问题其实你自己也没仔细想吧,你把com文件夹删除了,那么也就不存在com包了,那么你的b.java文件上哪里去调用com包文件啊,你的a现在只是java文件,不是class文件,那么你打成com.xxj的jar包也没有任何意义,编译器无法解析java文件,只能编译java文件,可以解析class文件,但是class文件被你删除了,那么编译b.java时候自然找不到com.xxj包了
hjh811 2010-03-02
  • 打赏
  • 举报
回复
引用 30 楼 xixibudong 的回复:
没想到楼主如此纠结。
我们在引用jar包时一般都会放在特定的目录下,其中像楼主说的%JAVA_HOME%\jre\lib\ext\下,我们不把它们放在那些目录下就不能用吗?显然不是。那为什么楼主的以上的这个程序编译运行会有问题?答案其实很简单:classpath
JAVA虚拟机会自动加载特定目录下的class或jar文件,这不需要用户手动指定。如果用户要使用自定义目录下的jar文件就应该和指定class文件一样,用classpath去指定它。

假设A.java 和B.java都在同一文件目录下。
我们先用javac -d . A.java编译得到com\xxj\A.class
然后用jar cvf A.jar com得到A.jar
这时如果用javac B.java编译肯定出错,因为就算B.java和A.jar在同一目录下,编译程序也不知道哪里去找A这个类
用javac -classpath A.jar B.java就行了。

明白了的话就知道运行要B.class该怎么办了。
正解
码之魂 2010-03-02
  • 打赏
  • 举报
回复
我知道楼主的意思了,
楼主你需要这样做!
1、编译A,并且生成JAR包!!!
2、将CLASSPATH中加入你的A.JAR包!!!
3、编译B吧!
星辰企业 2010-03-02
  • 打赏
  • 举报
回复

package com.wsb;

import com.wsb.*;

public class B{

public static void main(String [] args){
A a = new A();

a.printHelloWould();
}
}

package com.wsb;

public class A{

public void printHelloWould(){
System.out.println("Hello would!!!!!");
}
}



楼主如果你单纯的是在目录中只有这两个文件的话! 那么无论你导入com.wsb.*;还是导入com.wsb.A;是者可以编译通过的!

楼主要看看目录中是否还存在其它的文件中定义有A类!
TillPerfect 2010-03-02
  • 打赏
  • 举报
回复
不知道lz有没有明白,反正我明白啦

总结下:
我写了两个类

//A
package com.xxj;
public class A
{
public void print()
{
System.out.println("Hello World!");
}
}

//B
package com.test;
import com.xxj.A;
public class B
{
public static void main(String[] args)
{
A a = new A();
a.print();
}
}

(1)编译A.java,命令 javac -d . A.java
(2)将A.class打成jar包,命令 jar cvf A.jar com
(3)编译B.java,命令 javac -classpath A.jar -d . B.java
(4)运行,命令 java -classpath A.jar; com.test.B
智鹿软件 2010-03-02
  • 打赏
  • 举报
回复
引用 6 楼 ostroff 的回复:
import com.xxj.A;
public class B {
public static void main (String[] args) {
A a = new A();
a.printHelloWorld();
}
}
能通过,
import com.xxj.*;
public class B {
public static void main (String[] args) {
A a = new A();
a.printHelloWorld();
}
}
不能通过,??
第二个不要导包,试一下@!!
xixibudong 2010-03-02
  • 打赏
  • 举报
回复
引用 32 楼 ostroff 的回复:
我用java -classpath A.jar B运行,运行不了
还是照样用java B才可以运行啊


想想为什么javac -classpath A.jar B.java可以编译通过,而java -classpath A.jar B却又运行不了呢?还是:classpath
在同目录下只有A.jar和B.java的境况下,用javac B.java编译不了是因为找不到需使用的A.class,所以用javac -classpath A.jar B.java告诉编译器A.class在A.jar中。
在同目录下只有A.jar和B.class的境况下,用java B运行不了同样是因为找不到A.class,而用java -classpath A.jar B运行不了使因为找不到B.class!!

应该这样运行:java -classpath A.jar; B
加载更多回复(30)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧