JRuby is a RubyLanguage interpreter written in JavaLanguage for running on the JavaVirtualMachine
It allows access to the Java classes and libraries when programming in Ruby. You can also invoke the JRuby interpreter from Java.
JRuby 1.0 was released June 12, 2007. It is Ruby version 1.8.5-compatible and provides the vast majority of the usual Ruby standard library. It also comes with RubyGems and RakeMake.
JRuby with JavaSwing
#!/usr/bin/env jruby # File hello_world_swing.rb (2007-08-13) # A translation of Java tutorial HelloWorldSwing.java into JRuby 1.0 # http://java.sun.com/docs/books/tutorial/uiswing/examples/start/HelloWorldSwingProject/src/start/HelloWorldSwing.java require 'java' include_class 'javax.swing.JFrame' include_class 'javax.swing.JLabel' include_class 'javax.swing.SwingUtilities' def create_and_show_gui() # Create and set up the window frame = JFrame.new("Swingin' JRuby") frame.set_default_close_operation(JFrame::EXIT_ON_CLOSE) # Add the ubiquitous Hello World label label = JLabel.new("Hello, JRuby 1.0. How's it swingin'?") frame.get_content_pane.add(label) # Display the window frame.pack frame.set_visible(true) end if $0 == __FILE__ class HelloRunnable # Implement interface by including module include java.lang.Runnable def run() create_and_show_gui end end # Schedule a job for the event-dispatching thread # creating and showing this application's GUI SwingUtilities.invoke_later(HelloRunnable.new) end - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #!/usr/bin/env jruby # File file_system_lister.rb (2007-08-13) # Use CLI or JFileChooser to select a directory for file system listing # Don't bother loading the Java libraries if we don't need them require 'find' def list_file_sizes(dir_path) puts format('%10s : %s', 'BYTES', 'FILE PATH') Find.find(dir_path) do |f| puts format('%10d : %s', FileTest.size(f), f) if FileTest.file?(f) end end dir_path = ARGV[0] if dir_path.nil? require 'java' include_class 'javax.swing.JFileChooser' chooser = JFileChooser.new # starts at home directory by default chooser.set_file_selection_mode(JFileChooser::DIRECTORIES_ONLY) return_val = chooser.show_open_dialog(javax.swing.JPanel.new) if return_val == JFileChooser::APPROVE_OPTION dir_path = chooser.get_selected_file.get_path end end list_file_sizes(dir_path) unless dir_path.nil? exit # important
RubyLanguage and JavaLanguage DataStructures
# Ruby Array <-> Java array jArray = rArray.to_java rArray = jArray.to_a # or Array.new(jArray) # Ruby Array <-> Java Vector jVector = Vector.new rArray rArray = jVector.to_a # Array.new(jVector) won't work # Ruby Array of Arrays <-> Java Vector of Vectors jVoV = rAoA.inject(Vector.new) { |v, row| v.addElement(Vector.new(row)) ; v } rAoA = jVoV.inject([]) { |a, row| a << row.to_a } # Ruby Array <-> Java ArrayList jArrayList = ArrayList.new rArray rArray = jArrayList.to_a # Ruby Array <-> Java LinkedList jLinkedList = LinkedList.new rArray rArray = jLinkedList.to_a # Ruby Set <-> Java HashSet jHashSet = HashSet.new rSet.to_a rSet = Set.new jHashSet # Ruby SortedSet <-> Java TreeSet jTreeSet = TreeSet.new rSortedSet.to_a rSortedSet = SortedSet.new jTreeSet # Ruby Hash <-> Java Hashtable (caution, this will remove any nesting) jHashtable = Hashtable.new rHash rHash = Hash[*jHashtable.to_a.flatten] # Ruby Hash <-> Java HashMap (caution, this will remove any nesting) jHashMap = HashMap.new rHash rHash = Hash[*jHashMap.to_a.flatten] # Ruby Hash <-> Java TreeMap jTreeMap = TreeMap.new rHash rHash = Hash[*jTreeMap.to_a.flatten]I have yet to figure out how to construct an array of arrays which a Java method accepts as an Object[][] argument. So I look around for an overloaded method which accepts a Vector of Vectors. Does anyone know if JRuby can cobble together something which passes as Object[][]? -- ElizabethWiethoff
# Generate Object[][] from 2D ruby array: [['a', 'b'], ['d', 'e']].to_java(java.lang.Object[])