//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包

解决方案 »

  1.   

    package com.xxj; 
    public class B { 
    public static void main (String[] args) { 
    A.printHelloWorld(); 

      

  2.   

    import com.xxj; 改成 import com.xxj.A
    在把package加一下。LZ说的第三方JAR 我不太明白 还望赐教
      

  3.   

    import应该把包中的内容引入,不是引入包名,改成import com.xxj.*;应该就可以了吧
      

  4.   

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

    }
    打错了
      

  5.   

    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();
    }
    }
    不能通过,??
      

  6.   

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


    错误一>导包错误。import com.xxj.A; or import com.xxj.*;
    错误二>调用方法错误如果printHelloworld是A的静态方法这样A.printHelloWorld();没问题。
    但你上面写的A类没有这样的静态方法。那么就要得到A的实例。再用实例点方法才可以。
      

  7.   

    但现在问题是import com.xxj.A;能行,
    而import com.xxj.*;却不行,这又是为什么呢?
    我如果要用到第三方jar包,又该怎么办呢?
      

  8.   

    我如果要用到第三方jar包,又该怎么办呢?
      

  9.   

    如果两个类位于一个文件中,那么只能有一个类是public的,并且譔文件的名字与public类的名子一样
      

  10.   

    你将A类中的printHelloWorld()改为static 就可以啦
      

  11.   

    Just test it, it's working, as following://A.java
    package com.xxj;
    public class A{    public static void printHelloWorld(){     System.out.println("Hello, World!");
        }
    }
    //B.java
    import com.xxj.*;
    public class B{    public static void main(String args[]){ A.printHelloWorld();
    }
    }Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.C:\Documents and Settings\Wu>g:G:\>cd G:\test\CSDNG:\test\CSDN>set path=G:\java\j2sdk5.0\binG:\test\CSDN>set path=.,%G:\test\CSDN>javac Sum.java
    'javac' is not recognized as an internal or external command,
    operable program or batch file.G:\test\CSDN>set path=G:\java\j2sdk5.0\binG:\test\CSDN>javac
    Usage: javac <options> <source files>
    where possible options include:
      -g                         Generate all debugging info
      -g:none                    Generate no debugging info
      -g:{lines,vars,source}     Generate only some debugging info
      -nowarn                    Generate no warnings
      -verbose                   Output messages about what the compiler is doing
      -deprecation               Output source locations where deprecated APIs are u
    sed
      -classpath <path>          Specify where to find user class files
      -cp <path>                 Specify where to find user class files
      -sourcepath <path>         Specify where to find input source files
      -bootclasspath <path>      Override location of bootstrap class files
      -extdirs <dirs>            Override location of installed extensions
      -endorseddirs <dirs>       Override location of endorsed standards path
      -d <directory>             Specify where to place generated class files
      -encoding <encoding>       Specify character encoding used by source files
      -source <release>          Provide source compatibility with specified release  -target <release>          Generate class files for specific VM version
      -version                   Version information
      -help                      Print a synopsis of standard options
      -X                         Print a synopsis of nonstandard options
      -J<flag>                   Pass <flag> directly to the runtime system
    G:\test\CSDN>javac Sum.javaG:\test\CSDN>java Sum
    Exception in thread "main" java.lang.NoClassDefFoundError: SumG:\test\CSDN>set classpath=.G:\test\CSDN>java Sum
    7G:\test\CSDN>javac Sum.javaG:\test\CSDN>java Sum
    1
    3
    3
    13G:\test\CSDN>javac Sum.javaG:\test\CSDN>java Sum
    1
    3
    3
    7G:\test\CSDN>javac -d . .\com\xxj\A.javaG:\test\CSDN>javac B.java
    B.java:2: package com does not exist
    import com.xxj;
               ^
    B.java:7: cannot find symbol
    symbol  : variable A
    location: class B
                    A.printHelloWorld();
                    ^
    2 errorsG:\test\CSDN>javac B.java
    B.java:7: non-static method printHelloWorld() cannot be referenced from a static
     context
                    A.printHelloWorld();
                     ^
    1 errorG:\test\CSDN>javac -d . .\com\xxj\A.javaG:\test\CSDN>javac B.javaG:\test\CSDN>java B
    Hello, World!G:\test\CSDN>javac B.javaG:\test\CSDN>java B
    Hello, World!
      

  12.   

    B类中调用A 的方法,而该方法是个实例方法而不是类方法,所以应该创建A 的实例再调用
      

  13.   

    楼主要是希望使用第3方jar就需要,在环境变量中指明jar的路径
      

  14.   

    在classpath环境变量中加入第三方的jar包路径
      

  15.   

    把b文件的import那一行去掉,在同一目录下就不用import了,除非B文件和com文件夹在同一个目录下!
      

  16.   

    乱了,我重新问一下:首先,A.java文件是这样的:
    //A.java
    package com.xxj;
    public class A {
        public A() {
        }
        public void hello(){
         System.out.println("Hello, World!");
        }        
    }而在同一目录下的B.java文件是这样的:
    //B.java
    import com.xxj.A;
    public class B {
        public B() {
        }
        public static void main (String[] args) {
         A a = new A();
         a.hello();
    }    
    }然后运行命令:
    >javac A.java
    >javac B.java
    >java B
    没问题!输出Hello, World!接着运行:
    >jar cvf A.jar com
    也没问题!然后我删除了编译A.java得到的com文件夹,再运行:
    >javac B.java
    提示找不到com.xxj包————为何?至于我在上面一再提到的如何引用第三方jar包的问题,这就是一个模型,就好像我的一个工程需要引用某个开源包A.jar,我不想将A.jar放在%JAVA_HOME%\jre\lib\ext\目录,这个就是为了能发布而已。不知我表述你们理解不?这是一个困扰我很久的问题,在CSDN问了好久了,我感谢所有给我指点的人,谢谢了...
      

  17.   

    乱了,我重新问一下:首先,A.java文件是这样的:
    //A.java
    package com.xxj;
    public class A {
        public A() {
        }
        public void hello(){
         System.out.println("Hello, World!");
        }        
    }而在同一目录下的B.java文件是这样的:
    //B.java
    import com.xxj.A;
    public class B {
        public B() {
        }
        public static void main (String[] args) {
         A a = new A();
         a.hello();
    }    
    }然后运行命令:
    >javac A.java
    >javac B.java
    >java B
    没问题!输出Hello, World!接着运行:
    >jar cvf A.jar com
    也没问题!然后我删除了编译A.java得到的com文件夹,再运行:
    >javac B.java
    提示找不到com.xxj包————为何?至于我在上面一再提到的如何引用第三方jar包的问题,这就是一个模型,就好像我的一个工程需要引用某个开源包A.jar,我不想将A.jar放在%JAVA_HOME%\jre\lib\ext\目录,这个就是为了能发布而已。不知我表述你们理解不?这是一个困扰我很久的问题,在CSDN问了好久了,我感谢所有给我指点的人,谢谢了...
      

  18.   

    没想到楼主如此纠结。
    我们在引用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该怎么办了。
      

  19.   

    我用java -classpath A.jar B运行,运行不了
      

  20.   

    还是照样用java B才可以运行啊
      

  21.   

    我知道楼主的意思了,
    楼主你需要这样做!
    1、编译A,并且生成JAR包!!!
    2、将CLASSPATH中加入你的A.JAR包!!!
    3、编译B吧!
      

  22.   

    然后我删除了编译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包了
      

  23.   

    public static void main (String[] args) {
    A.printHelloWorld();
    }

    大哥,语法错了
      

  24.   


    想想为什么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
      

  25.   

    不知道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
      

  26.   


    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类!
      

  27.   

    java -classpath A.jar; com.test.B
    这里不太懂,也运行不出来。很谢谢各位了,尤其是xixibudong,TillPerfect
      

  28.   

    lz,提醒下,我写的B类和你写的B类有差别,我的那个类有 写 package,但是你的没有。
    所以,如果要对你的B类进行运行的话,就使用java -classpath A.jar; B
    我试了你的代码,这样可以的。
    唉,不知道你的问题究竟在哪里 
      

  29.   

    java -classpath A.jar; com.test.B
    分号是什么作用啊?
      

  30.   

    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);


    }



    }
      

  31.   

    public void printHelloWorld(){ 
        System.out.println("Hello, World!"); 
    }改成:
    public static void printHelloWorld(){ 
        System.out.println("Hello, World!"); 
    }
    在下面的B.java里就可以像你那样调用了.调用其它类的方法,要先把调用的类实例化一下.
      

  32.   

    回复39楼:
    java -classpath A.jar; com.test.B
    还是运行不出来呀????