2009-03-10 12 views
3

私たちの顧客は、MS Officeのような他のソフトウェアの他に、私たちのソフトウェア(Webstartを使用して起動したJava Swingアプリケーション)を使用して仕事をしています。時には、私たちのソフトウェアで多大な時間をかけずに処理しなければならない重要な出来事があります。顧客はそれから顕著な通知を得たいと思う。今すぐ彼はExcelを使用している可能性があるので、メッセージボックスをポップアップするだけでは十分ではありません(タスクバーのエントリは点滅します)。デスクトップアプリケーションの重要なイベントをユーザーに通知するにはどうすればよいですか?

Outlookノーティファイアのようなメカニズムが必要です。つまり、常に表示されるがフォーカスを奪うことのできないポップアップです。通知者は、メッセージの理由がなくなる(ユーザーが問題を解決した)か、ユーザーがメッセージを閉じた(Outlookのように)まで、常に表示されます。さらに、トレイアイコンを表示し、サウンドを再生したいと考えています。

Java6のjava.awt.SystemTrayとJDIC(バージョン0.9は既にそのプロジェクトのクラスパスにlibがあるので)を試しましたが、タイムアウトを設定する方法が見つかりませんでした。 TrayIcon.displayMessageメソッドを呼び出すと、メッセージが常に上に表示されないようです。

要求された動作を実現するためにJNI以外のオプションはありますか?

JNIが唯一の選択肢であり、Windowsがお客様の唯一のプラットフォームである場合、Outlook通知機能はOutlook専用機能ですか、Windows APIを通じて自由に使用できますか?

他のソフトウェアで現在のタスクを完了するのを妨げることなく、あるソフトウェアで実行する重要なタスクについてユーザーに通知するための他のオプションがあります。システムモーダルダイアログはオプションではありません!

答えて

3

あなたのJFrame/JWindowでsetAlwaysOnTopを試してみてください。ここで

+0

ニースのヒント。設定されていないJDialogをsetAlwaysOnTopで使用すると、フォーカスが奪われず、常にシステム全体で常に上になります。 java.awt.SystemTrayと組み合わせると、これが必要なのかもしれません。 –

+0

私はこれが私たちのために行く方法だと思っています.Snarlはインストールのオーバーヘッドのためにいいですが実際にはオプションではないからです。 java.awt.GraphicsEnvironmentを使用して、私は左下にウィンドウを配置しようとします(ユーザがデフォルト位置にタスクバーを持っていると仮定して)。 –

2

OS Xでは明らかな答えはGrowlです。しかし、Windows環境で同様のサービスを行う小さなプロジェクトが存在します。それはSnarlと呼ばれています。これにより、新しいオプションを試すことができます。

欠点:クライアントのマシンにツールをインストールする必要があります。あなたの説明から、会社の職場に定義されたユーザーグループがあると思いますよね?それにもかかわらず、これは容認できるかもしれません。

+0

はい、それは会社の職場でのユーザーの定義されたグループで、私はツールを見ているだろう。 –

+0

GrowlとSnarlは印象的なツールであるように思えますし、多大な努力を要することなくアプリケーションから簡単に使用できるように思われます。しかし、すべてのクライアントPCにツールをインストールする必要は、私たちの顧客にとっては不可能かもしれません。 –

+0

Snarl4JavaはGPLで公開されているため、私たちのためのオプションはありません。唯一の方法は、JNI自身を使用して接続を実装することです。 –

1

トレイを使用する:メッセージを表示するために使用しているコンポーネント(JPopup、JDialog、JFrame、JWindow)ですか?

どちらを使用しても、それを解き放つようにしてください(isFocusableメソッドをオーバーライド)、toFrontに電話してください。

また、結果をお知らせください。

+0

java.awt。TrayIconには、メッセージタイプ、タイトル、およびテキストに応じて、アイコン付きのバブルをポップアップ表示するdisplayMessageメソッドがあります。したがって、メッセージの表示方法を制御することはできません。この機能は、プラットフォームに依存することが文書化されています。したがって、実際の動作は将来変更される可能性があります。 –

0

予算があれば、JIDEのライセンスを検討してください。 JIDEには、Outlookポップアップ/アラートウィジェットとまったく同じように見えるように設計されたアラートポップアップがあります。

0

は一例です。

class AlertWindow extends Window implements MouseListener 
{ 
    AlertWindow(JFrame frame) 
    { 
     super(frame); 
     this.setAlwaysOnTop(true); 
     this.setFocusable(false); 
     this.setSize(200, 200); 
     this.setLocation(500, 0); 
     this.setBackground(Color.BLACK); 
     addMouseListener(this); 

     try { 
      Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); 
      Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class); 
      mSetWindowOpacity.invoke(null, this, Float.valueOf(0.50f)); 
     } catch (NoSuchMethodException ex) { 
      ex.printStackTrace(); 
     } catch (SecurityException ex) { 
      ex.printStackTrace(); 
     } catch (ClassNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IllegalAccessException ex) { 
      ex.printStackTrace(); 
     } catch (IllegalArgumentException ex) { 
      ex.printStackTrace(); 
     } catch (InvocationTargetException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    public void mouseClicked(MouseEvent e) 
    { 
     this.setVisible(false); 
    } 

    public void mousePressed(MouseEvent e) 
    { 
    } 

    public void mouseReleased(MouseEvent e) 
    { 
    } 

    public void mouseEntered(MouseEvent e) 
    { 
    } 

    public void mouseExited(MouseEvent e) 
    { 
    } 
} 
+0

例外のすべてで同じことをしているので、代わりにExceptionを呼び出すのはなぜですか?または私は何かを逃している? – SeanJA

関連する問題