SCOUTで謎のエラー#3214 原因はJava8だった!

Sassコンパイルで愛用しているSCOUTですがある日突然エラーが出て使えなくなりました。
SCOUTを起動して再生マーク?をクリックすると画像のコンソールが出て全く動かなくなります。

原因を色々調べてみると
scout-error#3214-details
scoutのprocess_interaction.jsの11行目でエラーが出ているようです。

該当箇所はJavaのローカルパスを読み込んでる場所です。

$(function(){
  var process_map = {};

  $(".project").live("watch:start", startWatchingProject);
  $(".project").live("watch:stop", stopWatchingProject);
  $(".projects").live("processes:killAll", killWatchingProcesses);
  air.NativeApplication.nativeApplication.addEventListener(air.Event.EXITING, killWatchingProcesses);

  function startWatchingProject(evnt, data) {
    var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
    nativeProcessStartupInfo.executable = javaDir();

    var processArgs = new air.Vector["<String>"]();

ああ、そういえば最近Javaをアップデートした気がする・・・
javaのパスを読んでいる箇所は

  function javaDir() {
    if(air.Capabilities.os.match(/Windows/)) {
      path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre7\\bin\\java.exe");
      if(!path.exists){
        path = air.File.applicationDirectory.resolvePath("C:\\Program Files (x86)\\Java\\jre7\\bin\\java.exe");
        if(!path.exists){
          path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre6\\bin\\java.exe");
        }
      }
      return path;
    } else {
      return air.File.applicationDirectory.resolvePath("/usr/bin/java");
    }
  }

Program Filesを調べましたが
"C:\\Program Files\\Java\\jre7\\bin\\java.exe"
"C:\\Program Files (x86)\\Java\\jre7\\bin\\java.exe"
"C:\\Program Files\\Java\\jre6\\bin\\java.exe"
ひとつも見当たりません・・・
どうやらアップデートでパスが変わってしまったようです。
Javaのダウングレードも考えましたが「セキュリティ上最新版を使え旧バージョンへの互換性もある」とJavaのHPに書いてあったのでJava8を使う方向でいきます。

Java8はjre8かと思いきやjre1.8.0_20にありました。
なので該当箇所にjre1.8.0_20を追加、下記のように書き換えました。

  function javaDir() {
    if(air.Capabilities.os.match(/Windows/)) {
      path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre7\\bin\\java.exe");
      if(!path.exists){
        path = air.File.applicationDirectory.resolvePath("C:\\Program Files (x86)\\Java\\jre7\\bin\\java.exe");
        if(!path.exists){
          path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre6\\bin\\java.exe");
          if(!path.exists){
            path = air.File.applicationDirectory.resolvePath("C:\\Program Files\\Java\\jre1.8.0_20\\bin\\java.exe");
          } 
        }
      }
      return path;
    } else {
      return air.File.applicationDirectory.resolvePath("/usr/bin/java");
    }
  }

Program Filesの中にあるのでテキストエディタは「管理者権限として実行」で動かさないと上書きできないので注意が必要です。
ファイルのパスは環境によって違うかもしれませんので自分で調べてください。

修正後は無事に動きました。

One Comment

コメントを残すコメントをキャンセル