Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java与Beanshell一起使用干净的代码访问字段和对象_Java_Beanshell - Fatal编程技术网

Java与Beanshell一起使用干净的代码访问字段和对象

Java与Beanshell一起使用干净的代码访问字段和对象,java,beanshell,Java,Beanshell,1) 。从我的问题中,我知道如何访问beanshell中的java字段和对象。然而,这并不是一种干净的实现方式,因为我需要首先在beanshell中设置java变量,然后才能使用它。然而,在中,它提供了在beanshell中使用映射的非常干净的方法,类似于我们在java中使用的方法,但是JMeter开发了它的know库(类),它有助于访问映射的get/put方法。我想以类似的方式在beanshell中访问地图 我已经检查了JMeter以获取更多信息,我想知道,我已经创建了用户定义变量temp和赋

1) 。从我的问题中,我知道如何访问beanshell中的java字段和对象。然而,这并不是一种干净的实现方式,因为我需要首先在beanshell中设置java变量,然后才能使用它。然而,在中,它提供了在beanshell中使用映射的非常干净的方法,类似于我们在java中使用的方法,但是JMeter开发了它的know库(类),它有助于访问映射的get/put方法。我想以类似的方式在beanshell中访问地图


我已经检查了JMeter以获取更多信息,我想知道,我已经创建了用户定义变量temp和赋值错误,现在在BSF过程中,我只写了一行vars.put('Name','temp value'),它已经更新了temp变量的值。所以,问题是我没有创建JMeterVariables对象变量,但beanshell仍然允许更新map中的值,而无需像您的答案中提到的那样设置任何值。我想知道这是怎么回事,需要更多的深度信息

2) 。我已经用java创建了自己的类,在beanshell中我正在导入这个类,但是它给出了
命令notfound:BSClass()
下面是完整的代码

Java类

package test;

public class BSClass {

public void BSCMethod(){
    System.out.println("I am from BSClass method BSCMethod");
    }
}
sample.bsh

import test.BSClass;

c=BSClass();
c.BSCMethod();
print("I am from BeanShell Script");
调用sample.bsh文件java类

package test;

import java.io.FileNotFoundException;
import java.io.IOException;
import bsh.*;

public class DynamicVariable {
   public static void main(String[] args) throws FileNotFoundException, IOException, EvalError {
    new bsh.Interpreter().source("\\src\\test\\sample.bsh");
   }
}
注:

  • 在JMeter中我不需要帮助,它将用于核心java和beanshell
  • 所有文件都在我的项目中
  • BSClass.class位于我的项目的bin文件夹下

  • 非常感谢您在Beanshell中的输入,您可以添加任何您想要的对象,包括地图

    在JMeter中,
    JMeterVariables
    是Map的特殊实现,在求值之前添加到Beanshell解释器中,还添加了特殊对象,如
    JMeterContext
    ,其中甚至包括
    JMeterVariables
    。代码:

        JMeterContext jmctx = JMeterContextService.getContext();
        JMeterVariables vars = jmctx.getVariables();
    
        try {
            bshInterpreter.set("ctx", jmctx);//$NON-NLS-1$
            bshInterpreter.set("Label", getName()); //$NON-NLS-1$
            bshInterpreter.set("prev", jmctx.getPreviousResult());//$NON-NLS-1$
            bshInterpreter.set("props", JMeterUtils.getJMeterProperties());
            bshInterpreter.set("vars", vars);//$NON-NLS-1$
    
    在使用map的情况下,您可以按照注释中的描述执行类似操作:

     bshInterpreter.set("myMap", javaMyMapObject);"
    
    然后在Beanshell中,从地图中获取特定密钥:

     myMap.get("aField");
    
    要创建类,您应该使用
    new
    关键字,请调用:

    c= new BSClass();
    
    而不是
    c=BSClass()

    若您创建自己的类,那个么该类应该位于相关包的jar中

    jar应该位于lib文件夹中,而不是bin文件夹中,请参阅:

    此类目录中的任何jar文件都将自动包含在 user.classpath,子目录中的jar文件将被忽略。给定的 值是在lib目录中找到的任何jar之外的值。全部的 条目将被添加到系统类加载器的类路径中,并且 也指向JMeter内部加载程序的路径


    我已经检查了JMeter以获取更多信息,我想知道,我已经创建了用户定义变量
    temp
    和赋值
    error
    ,现在在BSF过程中,我只需写一行
    vars.put('Name','temp value')
    ,它已经更新了temp变量的值。所以,问题是我没有创建
    JMeterVariables
    object
    vars
    ,但beanshell仍然允许更新map中的值,而无需设置您在回答中提到的任何值。我想知道它是如何工作的,需要更多的深度信息。JMeter在内部为您这样做了吗?您的意思是说,vars是类的现成对象,可以在JMeter中访问?我想为我的GUI应用程序实现类似的功能。您有什么建议?据我所知,您在这里使用JMeter作为示例-如果您的Java应用程序中有一个类公开get()和put()方法,比如map,那么您可以执行“bshinterpter.set”(“myMap”,javaMyMapObject);“然后在Beanshell中执行”myMap.get(“aField”);“代码(来自JMeter)@user7294900为“vars”提供了如下模式。您好,有关于答案的反馈吗?如果可以,它应该被接受和投票,以便其他人可以安全地使用它。ThxHi,我的笔记本电脑正在维修,因此无法检查。您是否创建了jar文件并放置在lib文件夹下?