有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jar无法访问java的其他项目中的方法

我创建了一个java项目,它的主体有以下类

package tfimvalidation;

public class ValidateToken {
    public void display()
    {
        System.out.println("Yor package imprort succesfully");
    }
}

这是java项目,现在我已经创建了这个项目的jar文件,并将它添加到我的动态web项目中

我可以使用以下语句访问ValidateToken类和包

ValidateToken validateToken = new ValidateToken();

但我无法访问validateToken。显示()

它给出了这种类型的错误; 令牌“display”上出现语法错误,此令牌后面应为标识符

这是第二个项目的代码,我使用了第一个项目的jar。 导入tfimvalidation。验证技术

public class Main
{
     ValidateToken validateToken=new ValidateToken();
    validateToken.display(); //Here gives above shown error.
}   

共 (4) 个答案

  1. # 1 楼答案

    不能只在这样的类声明中调用方法。可以在类声明中声明字段,但方法调用(用于字段初始值设定项的调用除外)必须在方法或构造函数中。例如:

    import tfimvalidation.ValidateToken;
    
    public class Test {
        public static void main(String[] args) {
            ValidateToken token = new ValidateToken();
           token.display();
        }
    }
    
  2. # 2 楼答案

    你在做什么

    public class Main
    {
         ValidateToken validateToken=new ValidateToken();
        ValidateToken.display(); //Here gives above shown error.
    }   
    

    你该怎么办

     public class Main
        {
           //call this function from main
          public void function(){
             ValidateToken validateToken=new ValidateToken();
            validateToken.display(); // here v in lowercase
           }
        }   
    

    首先,在类内调用display函数,但在主类内调用display函数,这在java中是不允许的 jar中的方法是非静态的,所以必须在创建对象后调用它

    如果要调用display();用类名做 在你的罐子里

    public static void display()
        {
            System.out.println("Yor package imprort succesfully");
        }
    

    在你调用jar函数的课堂上

    ValidateToken.display();
    

    注意:也要导入包

  3. # 3 楼答案

    出现编译时错误的原因是,您正在class body中调用token.display();,而不是在方法或其他code block中调用。你不能那样做。最不可能的变化是:

    下面的声明:

        ValidateToken token = new ValidateToken();
       token.display();
    

    变成这样的方法

      public static void main(String[] args) {
            ValidateToken token = new ValidateToken();
           token.display();
        }
    

    其他选项

    1)初始化块

    {
         ValidateToken token = new ValidateToken();
           token.display();
    }
    

    2)内部构造函数

         Main(){
     ValidateToken token = new ValidateToken();
               token.display();
    
        }
    

    3)静态块

            static {
     ValidateToken token = new ValidateToken();
               token.display();
             }
    

    当你把这些语句放在你的main method之外时,你需要创建新的对象,这样Init Block or Constructor will run如果它在static block内,它将在类加载到内存中时被调用,但我认为你也希望重用对象进行进一步的处理,所以我建议你把这些行放在main Method

  4. # 4 楼答案

    从main/any-other方法调用void-type方法,而不是像声明如下字段那样调用:

    public class Main
    {
        public static void main(String args[]) {//main is the entry point
           ValidateToken validateToken=new ValidateToken();
           validateToken.display();
        }
    }   
    

    或者

    public class Main
    {
        ValidateToken validateToken=new ValidateToken();
        public void myMethod() {
           validateToken.display();
        }
    }   
    

    或者

    public class Main
    {
        ValidateToken validateToken;
        public Main() {
            validateToken=new ValidateToken();
            validateToken.display();
        }
    
    }   
    

    如果它是一个返回类型为int的方法,您可以执行以下操作

    public class Main
    {
        ValidateToken validateToken=new ValidateToken();
        int myint = validateToken.display();//then of course method name would been different
    }