Ruby JRuby GUI-Software App

GUI-Software/Apps mit Rubys JRuby erstellen

Stellt vor, wie man plattformübergreifende Software/Apps mit grafischen Benutzeroberflächen für Windows, Mac OSX und Linux mit Rubys JRuby-Bibliothek erstellt. Ich möchte eine plattformübergreifende Ruby-GUI-Anwendung mit shoes (shoes4) in einer Windows 10-Umgebung erstellen.

Shou Arisaka
4 Min. Lesezeit
13. Nov. 2025

Stellt vor, wie man plattformübergreifende Software/Apps mit grafischen Benutzeroberflächen für Windows, Mac OSX und Linux mit Rubys JRuby-Bibliothek erstellt.

Ich möchte eine plattformübergreifende Ruby-GUI-Anwendung mit shoes (shoes4) in einer Windows 10-Umgebung erstellen.

Vorbereitung

  1. Installieren Sie Java und JDK
Java funktioniert nicht ohne Java. Jruby funktioniert nicht ohne die JDK-Entwicklerumgebung. Sie können Java nicht entwickeln.
  1. Installieren Sie jruby
[GettingStarted · jruby/jruby Wiki](https://github.com/jruby/jruby/wiki/GettingStarted)

Von Downloads — JRuby.org klicken und JRuby 9.2.0.0 Windows Executable (x64) herunterladen.

Installieren Sie es, setzen Sie den Pfad, starten Sie PowerShell usw. neu und überprüfen Sie, ob jruby installiert ist.

jruby --version
  1. jruby -S gem install shoes --pre
Gem installieren.

Referenz: shoes/shoes4: Shoes 4 : the next version of Shoes

Ausprobiert

app.rb

Shoes.app width: 300, height: 200 do
  background lime..blue

  stack do
    para "Welcome to the world of Shoes!"
    button "Click me" do alert "Nice click!" end
    image "http://shoesrb.com/img/shoes-icon.png",
          margin_top: 20, margin_left: 10
  end
end
shoes app.rb

Dies sollte ein GUI-Fenster öffnen.

Verpacken

PS C:\pg\rubyGuiAppDev> shoes package --help
Usage: shoes-swt [options]
        --jar                        Package as executable JAR file
        --mac                        Package as OS X application
        --windows                    Package as Windows application
        --linux                      Package as Linux application

Ups, Fehler…

PS C:\pg\rubyGuiAppDev\_> shoes package --windows .\app.rb
Packaging windows...
rm -f pkg/tmp/app.jar
Creating pkg/tmp/app.jar
ArgumentError: same file: pkg/tmp/windows-app-template/app.bat and pkg/tmp/windows-app-template/app.bat
  block in fu_each_src_dest at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1557
          fu_each_src_dest0 at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1574
           fu_each_src_dest at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1556
                         mv at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:516
                after_built at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/furoshiki-0.6.1/lib/furoshiki/windows_app.rb:34
                    package at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/furoshiki-0.6.1/lib/furoshiki/base_app.rb:41
               block in run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/lib/shoes/swt/packager.rb:52
                       each at org/jruby/RubyArray.java:1801
                        run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/lib/shoes/swt/packager.rb:49
                        run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/packager.rb:24
                        run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/ui/cli/package_command.rb:14
                        run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/ui/cli.rb:40
                     <main> at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/bin/shoes-swt:37
                       load at org/jruby/RubyKernel.java:994

Es heißt, es gibt Dateien mit demselben Namen, also ändern Sie den Namen.

app > firstapp

PS C:\pg\rubyGuiAppDev\_> shoes package --windows .\firstapp.rb
Packaging windows...
rm -f pkg/tmp/firstapp.jar
Creating pkg/tmp/firstapp.jar

Fertig.

Entpacken Sie das erstellte firstapp-windows.zip und führen Sie die .jar-Datei darin aus, um die GUI zu öffnen.

Referenz

Sobald Sie dies bestätigt haben, schauen wir uns das Rdoc an.

Top Level Namespace — Documentation for shoes/shoes4 (master)

Debugging-Methode

Ich bin neugierig auf die ask_open_file-Methode, aber speichert sie den Inhalt der geöffneten Datei in einem Objekt? Wie ruft man sie ab?

Da ich Java und Jruby zum ersten Mal berühre (obwohl ich Java ein wenig berührt habe), verstehe ich den IO-Teil auf der Windows-Seite nicht.

In solchen Zeiten wünsche ich mir, ich könnte mit pry debuggen…

The development group in Shoe's Gemfile has pry and pry-nav installed, which should give a solid, basic debugging experience when necessary.
[Development and Debugging Tools · shoes/shoes4 Wiki](https://github.com/shoes/shoes4/wiki/Development-and-Debugging-Tools)

Image

Fertig. ask_open_file scheint den absoluten Pfad der ausgewählten Datei zurückzugeben.

Vorgehensweise:

  1. Installieren: jruby -S gem install pry
  2. Fügen Sie dort hinzu, wo Sie das Debugging starten möchten
require "pry"
binding.pry

Es heißt, pry ist in der Gemfile und Sie können es sofort verwenden, aber Sie können es nicht ohne Installation verwenden. Ich verstehe es nicht wirklich. Nun, Sie können es installieren, also ist es ok.

Wenn Sie beenden möchten, verwenden Sie quit, und Sie können die Hilfe mit help sehen. Das pry, das ich kenne, verwendet continue, aber ich frage mich, ob pry und pry-byebug unterschiedlich sind. Ich verstehe es nicht wirklich.

Übrigens kann pry-byebug nicht installiert oder benötigt werden. Wenn Sie jruby -S gem install pry-byebug ausführen, erhalten Sie einen make-Fehler ERROR: Failed to build gem native extension.. Ich denke, es bedeutet, verwenden Sie es nicht.

Die Beruhigung von pry.

Debug von GUI starten

Lassen Sie pry starten, wenn Sie eine Schaltfläche drücken.

button do |b|
    b.text = 'pry'
    if b.enabled?
        binding.pry
    end
end

Schaltfläche drücken sendet Textbox-Wert an Ruby

Die edit_box-Methode wird jedes Mal ausgeführt, wenn Sie Text eingeben, und @edit_box_text wird neu geschrieben. Wenn Sie die Senden-Schaltfläche drücken, gibt es @edit_box_text aus.

edit_box do |e|
  @edit_box_text = e.text
end

button "send" do |b|
puts @edit_box_text
end

Es gibt auch Methoden, die Klassen wie inputBox aufrufen.

Referenz:

shoes4/element.rb at d16159b94ae8190059e1d596332da1ad9346b0a7 · shoes/shoes4

Diesen Artikel teilen

Shou Arisaka 13. Nov. 2025

🔗 Links kopieren