4.5.56 (November 2014)

Java 8がサポートが強化されました。

 

Java 8上でNexawebの<window/>, <dialog/>などのフローティングコンテナ上でマウスイベントが正しく処理されない場合があります。

この問題を解決するために、新しくSwingLayerdPane機能が追加されました。

SwingLayerdPaneはJava 8が使用されている場合に自動的に有効化されますが、明示的に機能を無効化するためのオプションが追加されています。

フローティングコンテナを用いていない場合はSwingLayerdPane機能を使用する必要が無いため、以下のオプションによって明示的にSwingLayerdPaneの機能を無効化してください。

--- nexaweb-client.xml によるSwingLayerdPaneの無効化設定(抜粋) ---------

<client-app>

  <layered-pane-type>npanel-layered-pane</layered-pane-type>

</client-app>

---

上記の設定項目が設定されていない場合、クライアント側で稼働するJVMバージョンによって以下のように自動的に判断されます。

  Java 8 以上が使用されている場合 : SwingLayerdPaneを使用する。

  Java 8 未満が使用されている場合 : 従来の機能(NPanelLayerdPane)を使用する。

 

The following defects are resolved in this build:
NXPSR-11106Tomcat 8 上で 実行するためのサポート
NXPSR-11082[互換性][Java 8]: 非アクティブウインドウをマウスクリックした場合、マウスクリックイベントが正しく発生しない
NXPSR-11083[Java 8]: Java 8上で動作する際に表示される「The JVM was not recognized or untested」ボタンの表示解除
NXPSR-11089[互換性][Java 8][*]: モーダルダイアログをvisible="false"を使用して非表示にした場合、アプリケーションが操作不可能になる場合がある
NXPSR-11090[互換性][Java 8][*]: <desktopPane/>内に配置されたUIコンポーネントが他ウインドウ上のユーザーオペレーションによって点滅する場合がある
NXPSR-11091[互換性][Java 8][*]: ダイアログを閉じた場合、ターゲットでは無いダイアログも一緒に閉じられる場合がある
NXPSR-11092[互換性][Java 8][*]: ポップアップが表示されない
NXPSR-11093[互換性][Java 8][*]: ドラッグ&ドロップオペレーションが無効になる
NXPSR-11094[互換性][Java 8][*]: ドラッグ&ドロップオペレーション中の自動スクロール機能が無効になる
NXPSR-11095[互換性][Java 8][*]: ドラッグ&ドロップオペレーション中のドロップターゲットの境界線がハイライトされない
NXPSR-11096[互換性][Java 8][*]: ドラッグ&ドロップオペレーションによるドロップターゲットのドロップイベントが発生しない
NXPSR-11097[互換性][Java 8][*]: MCO内のJavaコードによって追加されたポップアップメニューが表示されない
NXPSR-11098[互換性][Java 8][*]: <gridTable/>内で<lockedColumn/>が使用されている場合、横スクロールした際にヘッダが揺れて表示される
NXPSR-11099[互換性][Java 8][*]: SwingLayeredPaneを使用した場合、ウインドウ/ダイアログのドロップシャドウが表示されない
NXPSR-11101[互換性][Java 8][*]: ドラッグ&ドロップオペレーション中にドロップターゲット上に移動した場合、ドロップターゲットのハイライト表示が遅い

[*]マークの付いた項目はJava 8対応のために追加されたSwingLayerdPaneの機能に付随して生じ、内部的に修正された問題です。SwingLayerdPaneを使用しない場合、これらの修正が影響することはありません。
[*]マークの付いた項目の問題は内部的に修正された問題であるため、これら問題が生じる正式リリースバージョンは存在していません。

 

Feature Request:

NXPSR-11100[互換性][Java 8][FR]: nexaweb-client.xml に<layered-pane-type/>オプション設定項目を追加


Known issue:

NXPSR-11084[互換性][Java 8]: Nexawebアプリケーション内でキーボードイベントが発生しなくなる場合がある

この問題が生じるケースは以下の条件を全て満たした場合にのみ確認されています。

・Java 8を使用している場合

・MCOコード内でDisplayService#modalAlert()にてモーダルダイアログを表示し、マウスオペレーションでは無く、キーボードオペレーションによってモーダルダイアログを閉じた場合

・MCOコード内でDisplayService#modalAlert()の処理後にPrinterJob#printDialog()を表示するコードを記述していた場合

上記の条件のいずれかが満たされていなかった場合、この問題は生じません。

 

この問題は以下のJava 8のバグによって生じています。

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8023148

この Java 8のバグは既にJava 9のコードで修正されています。

 

発生条件が希なことと、既にJava側での修正が行われていることからこの問題が生じた場合は以下の代替手段を適応ください。

--- MCO 内の記述(抜粋) ---------

  /**

   * 代替手段用クラス

   * フォーカスを設定する

   */

  class FocusSetterTask implements Runnable {

    Element _old;

    public FocusSetterTask(Element old) {

      _old = old;

    }

    public void run() {

      // フォーカスを設定する

      _old.setAttribute("focused", "true");

    }

  }

 

  public void onCommand() {

    ClientSession cs = this.getSession();

    FocusService fs = cs.getFocusService();

    Element current =  fs.getCurrentFocus();

    Element old = current;  // モーダルアラート表示前にフォーカスを保持していたコンポーネントの取得

    DisplayService ds = cs.getDisplayService();

    // DisplayService#modalAlert() によるモーダルアラートの表示

    ds.modalAlert("メッセージ", "モーダルアラート", DisplayService.ALERT_INFORMATION, new String[] {"OK"}, new String[] {"OK"});

    getSession().getUiUpdateQueue().invokeLater(new FocusSetterTask(old));  // 代替手段の適応箇所

    try {

      PrinterJob printJob = PrinterJob.getPrinterJob();

      // (Printerに関するコードは中略)

      // PrinterJob#printDialog() によるプリンターダイアログの表示

      printJob.printDialog();

    } catch(Exception e) {

      // TODO Printerに関連する例外処理

    }

  }

 ---