当前位置: 首页 > news >正文

湖南建设人力资源湖南网站建设建设网站的成本

湖南建设人力资源湖南网站建设,建设网站的成本,小程序开发需要什么基础,wordpress 特色缩略图Java SDK附带了java.awt.Robot类#xff0c;该类允许键盘和鼠标输入的自动化以及屏幕捕获的创建。 如果您想编写一个模拟用户输入的小型测试应用程序#xff0c;或者只想自动化一些重复文本的输入#xff0c;则此功能非常有用。 但是您不想每次都编写一个完整的Java应用程序… Java SDK附带了java.awt.Robot类该类允许键盘和鼠标输入的自动化以及屏幕捕获的创建。 如果您想编写一个模拟用户输入的小型测试应用程序或者只想自动化一些重复文本的输入则此功能非常有用。 但是您不想每次都编写一个完整的Java应用程序。 另一方面ANTLR是解析器生成器使我们能够创建“域特定语言”DSL。 借助ANTLR我们可以开发一个简单的DSL它为java.awt.Robot每种方法提供一个命令。 从那时起我们可以轻松地为各种简单的自动化任务编写脚本。 第一步是发明新的“ DSL”的语法 不同的“陈述”应以分号分隔。 每个语句应包含一个“命令”和该命令的几个参数。 注释应该跨越多行使用类似C的注释/ *…* /或者仅直到行尾为止。 一个简单的文件可能如下所示 /* * A simple example demonstrating the basic features. */ delay 300; // sleep for 300ms mouseMove 20,30; createScreenCapture 100,100,200,200 file/home/siom/capture.png; mouseClick button1; keyboardInput Test; delay 400; 有了这些要求我们就可以开始写下语法了 grammar Robot;instructions:(instruction ;)EOF;instruction:instructionDelay |instructionMouseMove |instructionCreateScreenCapture |instructionMouseClick |instructionKeyboardInput; 我们将语法命名为“机器人”并定义第一条规则instructions 以便我们拥有一个或多个指令后跟一个分号作为指令分隔符直到到达文件末尾EOF。 我们要支持的指令作为规则instruction一部分列出。 不同规则之间的管道表示逻辑或即仅这些规则之一必须匹配。 最简单的规则是instructionDelay延迟 instructionDelay:delay paramMsINTEGER; ... INTEGER:[0-9]; 该规则以命令“ delay”开头后跟唯一一个以整数形式指定要休眠的毫秒数的参数。 令牌INTEGER显示在规则下方。 它只是定义了我们希望至少有一个介于0到9之间的数字。 为了简化以后对参数的处理我们将参数分配给名为paramMs的单独树节点。 进行屏幕截图的规则如下所示 instructionCreateScreenCapture:createScreenCapture xINTEGER , yINTEGER , wINTEGER , hINTEGER file fileFILENAME; ... FILENAME:FileNameChar; fragment FileNameChar:[a-zA-Z0-9/\\:_-$~.]; 紧随其后的是关键字createScreenCapture 用户必须在屏幕上应捕获的矩形的左上点提供两个坐标。 接下来的两个坐标表示矩形的宽度和高度。 最后用户必须提供捕获图像的文件名。 文件名由片段FileNameChar的一个或多个字符组成。 该fragment定义了文件名应允许的所有字符。 使用maven我们现在可以将此语法存储为src/main/antlr4文件夹中的Robot.g4文件并利用相应的maven插件生成Java词法分析器和解析器 buildpluginsplugingroupIdorg.antlr/groupIdartifactIdantlr4-maven-plugin/artifactIdversion${antlr.version}/versionexecutionsexecutiongoalsgoalantlr4/goal/goals/execution/executions/plugin.../plugins /builddependenciesdependencygroupIdorg.antlr/groupIdartifactIdantlr4-runtime/artifactIdversion${antlr.version}/version/dependency... /dependencies 要在我们自己的代码中使用生成的类必须依赖antlr4-runtime 。 方法execute()将输入文件的Path作为参数然后解析并执行它 public void execute(Path inputPath) throws IOException, AWTException {RobotLexer lexer new RobotLexer(new ANTLRInputStream(new FileInputStream(inputPath.toFile())));RobotParser parser new RobotParser(new CommonTokenStream(lexer));final Robot robot new Robot();parser.addParseListener(new RobotBaseListener() {Overridepublic void exitInstructionDelay(NotNull RobotParser.InstructionDelayContext ctx) {int delayParam Integer.parseInt(ctx.paramMs.getText());LOGGER.info(delay( delayParam ));robot.delay(delayParam);}...});parser.instructions(); } 该文件的内容通过ANTLRInputStream转发到由ANTLR生成的RobotLexer 。 在词法分析器解析文件并生成令牌流之后可以将该流传RobotParser实际的RobotParser 。 为了对传入的指令做出反应添加了ParseListener 。 幸运的是ANTLR已经创建了一个基本侦听器该侦听器使用空的实现来实现所有回调方法。 因此我们只需要重写我们要处理的方法。 当ANTLR为每个解析器规则创建一个回调方法时我们可以覆盖例如方法exitInstructionDelay() 。 生成的代码传递的参数的类型为RobotParser.InstructionDelayContex 。 正如我们之前在语法中将参数分配给单独节点一样此上下文对象具有字段paramMs 。 它的getText()方法以String返回此参数的值。 我们只需要将其转换为整数值然后将其传递给Robot实例的delay()方法即可。 下面的块中显示了规则instructionCreateScreenCapture的实现 Override public void exitInstructionCreateScreenCapture(NotNullRobotParser.InstructionCreateScreenCaptureContext ctx) {int x Integer.parseInt(ctx.x.getText());int y Integer.parseInt(ctx.y.getText());int w Integer.parseInt(ctx.w.getText());int h Integer.parseInt(ctx.h.getText());LOGGER.info(Rectangle rectangle new Rectangle( x , y , w , h ));Rectangle rectangle new Rectangle(x, y, w, h);LOGGER.info(createScreenCapture(rectangle););BufferedImage bufferedImage robot.createScreenCapture(rectangle);File output new File(ctx.file.getText());LOGGER.info(Save file to output.getAbsolutePath());try {ImageIO.write(bufferedImage, png, output);} catch (IOException e) {throw new RuntimeException(Failed to write image file: e.getMessage(), e);} } 其原理与上一条指令所示的相同。 传入的上下文对象的每个参数都有一个字段这些字符串值必须转换为整数值。 有了这些信息我们可以构造一个Rectangle对象调用Robot的createScreenCapture()方法并存储其BufferedImage 。 结论 为AWT的机器人创建专用DSL比预期容易。 所提供的maven插件从语法文件中创建所有必需的类并与之平滑地集成到构建过程中。 生成的DSL可用于自动化简单的鼠标和键盘任务包括创建屏幕截图。 PS源代码可从github获得 。 翻译自: https://www.javacodegeeks.com/2015/04/creating-a-dsl-for-awts-robot.html
http://www.zqtcl.cn/news/855044/

相关文章:

  • 付网站开发费计入什么科目网站开发的历史
  • 站长素材ppt模板免费下载网站开发视频教程迅雷下载
  • 建设一个网站怎么赚钱南京江北新区房价走势最新消息
  • 一个网站怎么做软件下载互联网投放渠道有哪些
  • 手机网站建设进度环境设计排版素材网站
  • 网站开发众筹地推网推平台
  • 长沙互联网网站建设wordpress标签id在哪里修改
  • 企业网站的建设 摘要大连网站设计策划
  • 做房地产一级市场的看什么网站网络营销外包推广方式
  • 网站建设基本流程包括哪几个步骤网站建设策划书网站发布与推广
  • 徐州整站优化手机网页端
  • 深圳中瑞建设集团官方网站宁波seo快速优化教程
  • 福田网站制作哪家好昆山企业网站建设公司
  • wordpress快六安网站自然排名优化价格
  • 网站的线下推广怎么做的系统官网网站模板下载安装
  • 北京网站优化推广公司企业网站建设费怎么核算
  • 网站建设vps个人如何做网站推广
  • 小语种网站怎么设计网页制作公司 大连
  • 贵港市城乡住房建设厅网站菜鸟教程网站
  • 广州网站建设找哪家免费搭建网站的软件
  • 培训班管理系统 免费太原优化网站排名
  • 上海怎么做网站网站让图片充满屏幕怎么做
  • 哈尔滨营销网站建设wordpress 加载图片不显示
  • 电商网站功能结构图网站做中秋专题怎么弄
  • 深圳专业建站平台陕西省建设工程质量安全监督总站网站
  • 制作网页的网站的软件是用户反馈数据分析软件园
  • 南京 做网站seo查询网站
  • 卖高仿名牌手表网站共享wifi小程序搭建
  • c#网站开发模板想在意大利做购物网站
  • 2015做那些网站能致富60天做网站