2017-03-11 3 views
0

Javaアプリケーションを開発しています。アプリケーションの起動後に自動的に最小化し、タスクバーから隠して代わりにシステムトレイに表示する必要があるJFrameがあります。現在、システムトレイに表示させていますが、手動でJFrameを最小化しています。私は次の2つのオプションを試してみました:JFrameのコードから最小イベントをトリガーする

setExtendedState(JFrame.ICONIFIED); 
setVisible(false); 

しかし、それはうまくいきませんでした。前もって感謝します。

+0

これはOS固有の実装になるため、私はSwing/JavaFXで簡単に達成できるとは思っていません。 Javaネイティブ・アクセス(https://github.com/java-native-access/jna)やJNI(http://docs.oracle.com/javase/7/docs/technotes)のようなものを使用する必要があります/ guides/jni /)を使用して、これを行うには、これはほとんど簡単です。 –

+0

"うまくいかなかった"とはどういう意味ですか?あなたの期待に合わなかったsetExtendedState(JFrame.ICONIFIED)はどうでしたか? – VGR

+0

ネイティブベースのもの(JNI経由)を探す場合は、ここをクリックしてください:http://jnicookbook.owsiak.org - JNIに精通している間に人の時間を節約することになっています。 – mko

答えて

0

多分、これはOS Xのバージョンに依存します。ただし、このコード:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package simple; 

import javax.swing.JFrame; 

/** 
* 
* @author michalo 
*/ 
public class NewJFrame extends javax.swing.JFrame { 

    /** 
    * Creates new form NewJFrame 
    */ 
    public NewJFrame() { 
     initComponents(); 
     setExtendedState(JFrame.ICONIFIED); 

    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 400, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 300, Short.MAX_VALUE) 
     ); 

     pack(); 
    }// </editor-fold>       

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new NewJFrame().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    // End of variables declaration     
} 

は期待どおりに動作します。

新しいJFrameを開いて最小化します。私は、Javaを使用しています

Javaのバージョン "1.8.0_11"

のMacOS:10.10.5

上記のオートは、NetBeansによって生成されたコード。

関連する問題