カテゴリー
未分類

1月の吟簫

  • 13日 就く前に舌禍で下げるマーケット
  • しっかりと休み採るのもプロの腕
カテゴリー
未分類

Virtual Magnifying Glass という OSS

  1. このトピックでは Linux での利用を想定した手順を示す。事前に bzip2 がインストールされている必要がある。他にも、Windows 7/8用、FreeBSD用、Mac OSX 用が利用可能だがここでは触れない。
  2. Virtual Magnifying Glass 3.7からソースコードを入手する
    cd ~/ダウンロード
    wget http://sourceforge.net/projects/magnifier/files/magnifier%20for%20Linux/3.5/magnifier-linux-3.5.tar.bz2/download
    
  3. 解凍して、カレントディレクトリを替える
    tar jxvf magnifier-linux-3.5.tar.bz2
    cd magnifier-linux-3.5/
    
  4. インストールはとても簡単。これだけ。実行形式が /usr/bin/vmg にインストールされる。
    sudo bash -x ./install.sh
    
  5. 動作確認を行う。インストールがうまくいっていれば、画面のどこかをクリックするまでの間維持される、拡大鏡が表示される。
    vmg &
    
  6. トラブルシューティング
    • bad ELF interpreter: そのようなファイルやディレクトリはありません
      sudo yum install -y \
       glibc-2.17-106.0.1.el7_2.4.i686 \
       libX11-1.6.3-2.el7.i686 \
       gdk-pixbuf2-2.31.6-3.el7.i686 \
       gtk2-2.24.28-8.el7.i686
      
    • /usr/bin/vmg: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
      sudo yum install gtk2-2.24.31-1.el7.i686
      
    • 未解決の障害。拡大鏡は表示されるがコンソールに次のメッセージが表示されブロッキングされる。
      (vmg:14248): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "murrine",
      Form resource TMainWindow not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource.
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/topleft.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/topright.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/bottomleft.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/bottomright.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/top.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/left.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/bottom.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/right.bmp
      [TMainWindow.SetTaskbarIcon] Loading /usr/share/magnifier/icon3.png
      Form resource TAboutWindow not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource.
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/cecae.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/feusp.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/vmg.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/lupa.bmp
      [TGlass.LoadBitmap] Loading /usr/share/magnifier/usplegal.bmp
      Form resource TConfigDialog not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource.
      
カテゴリー
プログラミング 未分類

ControlsFX 導入後に NetBeans 8.1 からの SceneBuilder 8.2 の起動に失敗する障害

再現方法

  1. プラットホームは Windows 10 64-bit 版。
  2. ControlsFX (version 8.40.10) というオープン・ソースのライブラリを利用する為、NetBeans で構築したプロジェクトホームの直下に lib/ を作り、controlsfx-8.40.10.jar を配置。
  3. SceneBuilder を単独で起動して、プロジェクトで使う FXML を開き、歯車アイコン中の”Import JAR/FXML file…” というメニューから controlsfx-8.40.10.jar を選択。
  4. Custom から StatusBar コントロールを選択して ”Hierarchy” の所定の位置へ配置。
  5. FXML を保存後、SceneBuilder を閉じる。
  6. NetBeans を起動して、今回のプロジェクトを開き、プロジェクトツリーから当該 FXML をダブルクリック。
  7. 従来なら SceneBulder が自動的に起動して FXML も同時にオープンされるが、そのようにならず次のようなダイアログが表示されて失敗するようになった。
    Could not open '[NAME].fxml' Open operation has failed. Make sure the chosen file is a valid FXML document.
    Could not open ‘[NAME].fxml’ Open operation has failed. Make sure the chosen file is a valid FXML document.
  8. “Show Details…”ボタンを押すと次のようなスタックトレースが表示される。
    java.io.IOException: javafx.fxml.LoadException: 
    /MYPROFILE/Documents/NetBeansProjects/PATH/TO/MYPROJECTHOME/form/[NAME].fxml
    
    	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:92)
    	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:82)
    	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:97)
    	at com.oracle.javafx.scenebuilder.kit.editor.EditorController.updateFxomDocument(EditorController.java:2384)
    	at com.oracle.javafx.scenebuilder.kit.editor.EditorController.setFxmlTextAndLocation(EditorController.java:664)
    	at com.oracle.javafx.scenebuilder.app.DocumentWindowController.loadFromFile(DocumentWindowController.java:381)
    	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.performOpenFiles(SceneBuilderApp.java:554)
    	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.handleOpenFilesAction(SceneBuilderApp.java:424)
    	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.handleLaunch(SceneBuilderApp.java:403)
    	at com.oracle.javafx.scenebuilder.app.AppPlatform.requestStartGeneric(AppPlatform.java:139)
    	at com.oracle.javafx.scenebuilder.app.AppPlatform.requestStart(AppPlatform.java:106)
    	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.start(SceneBuilderApp.java:353)
    	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863)
    	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
    	at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
    	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    	at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: javafx.fxml.LoadException: 
    /MYPROFILE/Documents/NetBeansProjects/PATH/TO/MYPROJECTHOME/form/[NAME].fxml
    
    	at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    	at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2848)
    	at javafx.fxml.FXMLLoader.processImport(FXMLLoader.java:2692)
    	at javafx.fxml.FXMLLoader.processProcessingInstruction(FXMLLoader.java:2661)
    	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2517)
    	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
    	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:89)
    	... 20 more
    Caused by: java.lang.ClassNotFoundException: org.controlsfx.control.StatusBar
    	at java.lang.ClassLoader.findClass(ClassLoader.java:530)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	at javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:2916)
    	at javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905)
    	at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846)
    	... 25 more
    

回避方法

  1. 次のコマンドで、SceneBuilder.cfg を探す
  2. dir /b /s "%UserProfile%" | findstr "SceneBuilder.cfg"
    
  3. SceneBuilder.cfg をエディタで開き、次のように改修する
    • 改修前
      app.classpath=
      
    • 改修後
      app.classpath=$APPDIR/../../../Documents/NetBeansProjects/PATH/TO/MYPROJECTHOME/lib/controlsfx-8.40.10.jar
      
    • 以上で対策完了。NB の再起動は不要。

所感