非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Go言語でJavaFXのクラスファイルを実行するランチャーを作った

   

たいしたプログラムじゃないけど、JavaFXのクラスファイルをコマンドプロンプトでjava xxx.classと打って実行するのもしんどいので(いろいろオプション付けて長ったらしくなるし)、せっかくのGUIアプリなのでダブルクリックでさくっと起動できるようにGo言語でランチャー作りました。

※jarファイルにまとめるとダブルクリック実行できるのですが、Linuxだとプロパティ設定したりスマートじゃないなと。

ランチャーの仕様は、

  • ランチャーのファイル名をClassファイルと同名にすることで実行クラスを指定できること。
  • そのランチャーはショートカットをどこにでも設置できること。
  • 自分のパソコンで起動さえすればOK
  • うまく動作しないときはコマンドライン実行でエラーが確認できること。

以上を踏まえて作ったプログラムがこちら。go runでは動きません。go buildしてから実行ファルを動かしてください。実行ファイルをJavaのメインクラスのファイルと同じフォルダに置いて、且つファイル名をメインクラスと同じファイル名(拡張子なし)にしてダブルクリックするとランチャーとして機能します。

package main

import (
  "fmt"
  "os/exec"
  "os"
  "path/filepath"
  "bytes"
)

func main() {
  fullpath, _ := os.Executable()
  path := filepath.Dir(fullpath)
  fname := filepath.Base(fullpath)

  cmd := exec.Command("java", "--module-path", "/home/c340/lib/openjfx-11.0.2_linux-x64_bin-sdk/javafx-sdk-11.0.2/lib",
           "--add-modules=javafx.controls,javafx.fxml", fname)
  cmd.Dir = path //これ大事
  var out bytes.Buffer
  var stderr bytes.Buffer
  cmd.Stdout = &out
  cmd.Stderr = &stderr
  err := cmd.Run()
  if err != nil {
    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    return
  }
  fmt.Println("Result: " + out.String())
}
 

 

 

スポンサーリンク

 - Go言語, Java