学到的Jruby知识:
Jruby基本知识
Jruby对Java的类常量的引用
Jruby里java bype与ruby string的转换
Jruby实现Java接口的虚函数
本想按装ruby-serialport这个gem,没想到还需要安装nmake,不如用Jruby直接调用Java的包来的简单些,顺便在学习下Jruby
目前,常见的Java串口包有SUN在1998年发布的串口通信API:comm2.0.jar(Windows
下)、comm3.0.jar(Linux/Solaris),可是现在SUN对windows版本的comm.jar已经不再提供下载(可以google javacomm20-win32的到下载连接)。不过http://www.rxtx.org提供了另外一个串口的driver -- RXTXcomm.jar,这个包可以和SUN的comm.jar一起完成串口变成工作。
首先须对comm.jar指定串口driver用RXTXcomm.jar中的gnu.io.RXTXCommDriver,这个需要在comm.jar的目录或者jre的lib目录下创建javax.comm.properties:
Driver=gnu.io.RXTXCommDriver
下面是一个列出所有串口的Jruby程序
require 'java'
require 'comm.jar'
require 'RXTXcomm.jar'
import java.lang.System
# add comm.jar to the class path to make sure the program
# get the properties file
# This line must be before import
System.setProperty("java.class.path", "#{System.getProperty("java.class.path")}comm.jar")
import javax.comm.CommPortIdentifier
# Jruby convert method getPortIdentifiers to identifiers to be more ruby style
# Of course, getPortIdentifiers works too
CommPortIdentifier.port_identifiers.each do |portId|
# need to convert CommPortIdentifier.PORT_SERIAL -- java format
# to CommPortIdentifier::PORT_SERIAL -- ruby format
if (portId.getPortType() == CommPortIdentifier::PORT_SERIAL)
puts portId.getName()
end
end
如果用2.0版的SUN的comm.jar,步骤是类似的:
javax.comm.properties:
Driver=com.sun.comm.Win32Driver
程序也是类似的,只需要移除下面这行
require 'RXTXcomm.jar'
下面是个稍微复杂的例子,用来读写串口
require 'java'
require 'comm.jar'
import java.lang.System
System.setProperty("java.class.path", "#{System.getProperty("java.class.path")};comm.jar")
import javax.comm.CommPortIdentifier
import javax.comm.SerialPort
CommPortIdentifier.port_identifiers.each do |portId|
if ( portId.name() == "COM3")
serial_port = portId.open("Modem", 2000)
serial_port.setSerialPortParams(9600,
SerialPort::DATABITS_8,
SerialPort::STOPBITS_1,
SerialPort::PARITY_NONE)
serial_port.output_stream.write("AT+GMM\r".to_java_bytes)
bytes = Java::byte[20].new
len = serial_port.input_stream.read(bytes)
puts String.from_java_bytes bytes
end
end
再复杂一点儿的例子,用Jruby完成java的接口,完成回调函数
require 'java'
require 'comm.jar'
import java.lang.System
System.setProperty("java.class.path", "#{System.getProperty("java.class.path")};comm.jar;.")
import javax.comm.CommPortIdentifier
import javax.comm.SerialPort
import javax.comm.SerialPortEventListener
import javax.comm.SerialPortEvent
#完成SerialPortEventListener的serialEvent接口
module SerialPortEventListener
def initialize(serial_port)
@serial_port = serial_port
end
def serialEvent(e)
case e.event_type
when SerialPortEvent::DATA_AVAILABLE
bytes = Java::byte[20].new
len = @serial_port.input_stream.read(bytes)
puts String.from_java_bytes bytes
when SerialPortEvent.BI
puts "\n--- BREAK RECEIVED ---\n"
end
end
end
CommPortIdentifier.port_identifiers.each do |portId|
if ( portId.name() == "COM3")
serial_port = portId.open("Modem", 2000)
serial_port.notifyOnDataAvailable(true)
serial_port.notifyOnBreakInterrupt(true)
serial_port.addEventListener(SerialPortEventListener.new(serial_port))
serial_port.setSerialPortParams(9600,
SerialPort::DATABITS_8,
SerialPort::STOPBITS_1,
SerialPort::PARITY_NONE)
puts "Write command to the port COM3"
serial_port.output_stream.write("AT+GMM\r".to_java_bytes)
sleep 3
puts "Write command to the port COM3"
serial_port.output_stream.write("AT+GMM\r".to_java_bytes)
sleep 3
puts "Write command to the port COM3"
serial_port.output_stream.write("AT+GMM\r".to_java_bytes)
exit
end
end
分享到:
- 2009-02-08 21:34
- 浏览 1957
- 评论(5)
- 论坛回复 / 浏览 (5 / 5707)
- 查看更多
相关推荐
jruby-complete-1.7.19.jar,java版本的ruby解析器
burpsuite插件接口ruby,直接在burp extend option里面添加,就可以在store里面添加需要的插件啦
找不到或无法加载主类org.jruby.Main。 原因是/usr/local/hbase/lib 目录下没有jruby-complete-1.7.19.jar文件.,下载本文件,解压缩后将jar文件直接添加到/usr/local/hbase/lib 目录下。
JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。 截至2017.12.08最新稳定版 JRuby 官方更新说明: JRuby 9.1.x is our current ...
**标题解析:**"jruby-...总之,"jruby-bin-0.9.0.tar.gz"是一个包含早期版本JRUBY的压缩文件,为开发者提供了在Java平台上使用和开发Ruby代码的能力,结合了两种语言的优点,为开发工作带来了更大的灵活性和便利性。
总的来说,"jruby-src-1.0.zip"是一个对于学习JRuby和Ruby在Java平台上的应用至关重要的资源。它不仅提供了源代码供学习和研究,还可以帮助开发者更好地理解和利用JRuby在实际项目中的优势。无论是为了提升技能、...
JRuby是Java平台上的一个实现,它允许开发者在Java虚拟机(JVM)上运行Ruby编程语言。这个“jruby-bin-1.3.1.zip”压缩包是JRuby的一个早期版本,专为Ruby语言的研发提供必要的工具和环境。在这个版本中,重点是兼容...
JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。 截至2017.12.08最新稳定版 JRuby 官方更新说明: JRuby 9.1.x is our current ...
jruby-console-0.9.2.jar groovy-1.0-beta-2.jar groovy-all-1.8.6.jar bsh-1.3.0.jar
这个版本的发布日期可能相对较早,但它仍然是学习和理解JRuby与Java集成的一个重要里程碑。 JRuby的主要特点包括: 1. **兼容性**:JRuby完全兼容Ruby 1.8.7,这意味着你可以使用大部分标准库和第三方Gem(Ruby的...
4. JRuby 还可以作为 Java 代码调用 Ruby 代码的桥梁,通过 JRuby API 实现 Java 和 Ruby 之间的互操作。 关于 sbuild-https-plugin: 1. sbuild-https-plugin 是 Debian 开发者用来增强 sbuild 功能的工具,允许...
这个插件是用Ruby语言(JRuby)编写的,旨在与Maven构建工具集成,帮助开发者在Java项目中使用Ruby脚本或依赖。 描述 "geomajas-project-geometry.zip,几何图形JTS支持几何图形项目" 指出我们还涉及到了另一个项目...
jruby与java使用开发,听说jruby能是swing的调用变为更简单
JRuby是Java平台上的一个Ruby语言实现,它允许开发者在Java平台上使用Ruby语法进行开发,同时利用Java的生态系统和性能优势。 描述中的信息虽然简洁,但同样指向了JRuby的源代码。"jruby-src-1.1b1.zip"暗示了这是...
jruby-stdlib-1.7.23.jar
《JRuby和Rails-让Ruby语言融入于Java项目》是一本深入探讨如何在Java环境中使用JRuby和Rails框架的教程。这本书旨在帮助开发者理解和实践如何将Ruby on Rails的灵活性和生产力引入到Java企业级开发中,从而提升软件...
经典版本Java 环境配套 jruby-complete-9.3.14.0 Java 开发者必备配套环境组件 jruby 目前为较新版本 可以符合大部分开发环境
JRuby 1.7.9 是该版本线的一个特定发布,可能包含了对 Ruby 1.9.x 版本的兼容性优化和一些已知问题的修复。 描述中的 "opencmsmoduleswar.zip" 提到了 OpenCMS,这是一个开源的内容管理系统,主要用于构建和管理...
jruby-maven-plugins, 以 Maven 方式,Maven 插件用来处理 rubygems 包括对 rspec Rails Cucumber rake等的支持 Maven 插件 gem-工件有 Maven 存储库,torquebox.org 提供了来自 rubygems.org的gem ( 只有 ruby 和...