2012-09-10 61 views
3

我最近開始在java中使用swing製作類似掃雷的遊戲(使用eclipse WindowBuilder),並且在應用程序中有一個帶有JMenu的普通JFrame,並帶有選項。它的工作原理應該是在調整窗口大小之前。然後,當我點擊菜單來顯示它時,它只顯示直到我釋放鼠標按鈕,然後消失,就好像我點擊了其他地方。但是當我通過鍵盤快捷方式訪問菜單時,它正常工作。有誰知道問題在哪裏? 代碼菜單:Swing JMenu表演奇怪

JMenu mnHelp = new JMenu("Help"); 
    mnHelp.setMnemonic('h'); 
    menuBar.add(mnHelp); 

    JMenuItem mntmControls = new JMenuItem("Controls"); 
    mntmControls.setMnemonic('c'); 
    mntmControls.setIcon(new ImageIcon(Main.class 
      .getResource("/org/img/menu-help.png"))); 
    mnHelp.add(mntmControls); 

    JSeparator separator_1 = new JSeparator(); 
    mnHelp.add(separator_1); 

    JMenuItem mntmAbout = new JMenuItem("About"); 
    mntmAbout.setMnemonic('g'); 
    mntmAbout.setIcon(new ImageIcon(Main.class 
      .getResource("/org/img/menu-about.png"))); 
    mnHelp.add(mntmAbout); 

編輯:

我做了一些實驗,事實證明這並非是因我的計劃什麼問題,但在Java或偏食代替,因爲即使是 `

package testpack; 

import java.awt.Dimension; 
import javax.swing.*; 

public class Main { 

    public static void main(String[] args) { 
     JFrame jfr = new JFrame(""); 
     jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JMenuBar jmb = new JMenuBar(); 
     JMenu jm = new JMenu("Hello"); 
     JMenuItem jmi = new JMenuItem("Hi"); 
     jm.add(jmi); 
     jmb.add(jm); 
     jfr.setJMenuBar(jmb); 
     jfr.setMinimumSize(new Dimension(400, 400)); 
     jfr.setVisible(true); 
    } 
} 

'(這是整個源)

:喜歡它的代碼,我會在這裏貼有同樣的問題的一個簡單的程序

我使用薄荷肉桂13和Eclipse 4.2。那麼有什麼我可以做的解決這個問題?

+0

你能展示創建和設置JFrame的代碼嗎? –

+1

爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)(而不是更多的「零碎和碎片」)。另外,SSCCE是否會包含任何AWT組件?它會涉及自定義渲染? –

+3

不相關我認爲,但最好把擺動代碼放在事件派發線程中,就像[在這個HelloWorldSwing]中一樣(http://docs.oracle.com/javase/tutorial/displayCode.html?code=http:/ /docs.oracle.com/javase/tutorial/uiswing/examples/start/HelloWorldSwingProject/src/start/HelloWorldSwing.java)。 – Istao

回答

0

不幸的是,it's an java issue with Cinnamon。你無法避免,除非你

  • 開關SWT(見Eclipse的本身,它正常工作),
  • 切換到另一個操作系統(它們不運行肉桂),
  • 切換到另一個窗口經理。
  • 雖然不太可能,但也可能是另一個JVM沒有這個問題(f.i.另一個OpenJDK甚至是Oracle JVM等)。

點是(據我所知)Java是否應該區分在linux 運行大量的窗口管理器,但識別只是其中的一部分 - 而不是肉桂在這個特殊的問題。

更悲傷:這個問題似乎也發生在瑪特身上。