Electron Adventures: 에피소드 83: JRubyFX

7373 단어 electronrubyjava
이전 에피소드에서 우리는 SWT로 JRuby를 시도했는데 좋지 않았습니다. 음, Java 세계는 그것이 나쁘다는 것을 알고 SWT를 JavaFX로 대체했으므로 시도해 봅시다.

불행한 시작



JRuby로 첫 번째 설정.ruby_version:

jruby-9.3.1.0


그리고 Gemfile를 사용하여 jrubyfx:

source "https://rubygems.org"

gem "jrubyfx", "~> 1.2"


이제 문서에서 Hello World를 시도하면 다음과 같은 결과를 얻습니다.

JavaFX runtime not found.  Please install Java 7u6 or newer or set environment variable JFX_DIR to the folder that contains jfxrt.jar
If you have Java 7u6 or later, this is a bug. Please report to the issue tracker on github. Include your OS version, 32/64bit, and architecture (x86, ARM, PPC, etc)


글쎄요, judging by Github Issues 2019년 2월부터 버그가 생겨서 그다지 유망한 출발은 아닙니다.

일부 조사 후 JavaFX는 원래 Oracle JDK의 일부로 포함되었습니다but then Oracle JDK moved it out. 그리고 OSX에서 사용하는 것을 포함하여 다른 Java 구현에는 포함되지 않았습니다.

그래서 우리는 jpm install javafx 그리고... 농담으로 Java에는 npm 또는 gem 같은 것이 없습니다.

설상가상으로 Java 개발자 커뮤니티는 끔찍하며 "이 URL을 컬링하고 이 명령을 실행하십시오"또는 "패키지를 다운로드하려면 이 링크를 클릭하십시오"라고 말하는 대신 "설치하십시오"라고만 말하고 어떤 것을 알아낼 것을 기대합니다. 100개 버전 중 작동해야 합니다. 그리고 개발자뿐만 아니라 사용자도 같은 방식으로 대합니다. 거의 모든 다른 언어 커뮤니티가 이것을 더 잘 처리합니다.

이전 자바 사용



그래서 오래된 Mac을 확인했는데 오래된 Oracle Java가 설치되어 있었습니다.

글쎄, export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/ 그리고 계속합시다.

안녕, 세계!



다음은 Hello World 프로그램입니다.

#!/usr/bin/env ruby

require "jrubyfx"

class HelloWorld < JRubyFX::Application
  def start(stage)
    with(stage, width: 300, height: 300, title: "Hello, World!") do
      layout_scene do
        label("Hello, World!")
      end
      show
    end
  end
end

HelloWorld.launch




카운터



그리고 여기 카운터 앱이 있습니다. 내장된 반응성이 없으므로 상태를 업데이트할 때마다 UI를 수동으로 업데이트해야 합니다.

#!/usr/bin/env ruby

require "jrubyfx"

class Counter < JRubyFX::Application
  def start(stage)
    count = 0

    with(stage, width: 300, height: 300, title: "Counter App") do
      layout_scene do
        vbox do
          count_label = label("Count: #{count}")
          hbox do
            button("+1").set_on_action {
              count += 1
              count_label.text = "Count: #{count}"
            }
            button("-1").set_on_action {
              count -= 1
              count_label.text = "Count: #{count}"
            }
          end
        end
      end
      show
    end
  end
end

Counter.launch




결과



아직 명확하지 않은 경우에는 이 중 어떤 것도 사용하지 마십시오. UI가 SWT보다 약간 낫고 레이블 텍스트의 크기가 올바르게 조정되었지만 실제로는 현대 UI 프레임워크에서 기대하는 것과는 거리가 멀고 진입해야 하는 Java 생태계는 엉망진창입니다.

많은 Electron 대안을 시도해 본 결과 NodeGui가 완전히 쓰레기가 아니었고 거기에서도 친숙한 HTML+CSS 세계를 포기하는 데 큰 비용을 지불해야 한다고 말하고 싶습니다.

그래서 다음 에피소드에서 다시 Electron에 무언가를 작성해 봅시다!

평소와 같이 all the code for the episode is here .

좋은 웹페이지 즐겨찾기