2014-07-22 77 views
0

我正在編寫一個帶有JMenu的JFrame的程序。一旦用戶點擊一個menuItem,就會調用一個JDialog,以從用戶那裏獲取一個String。我想在我的主程序中使用該字符串,但我不知道如何將該值從JFrame返回到主程序(我設法將該值從JDialog返回給JFrame)。有任何想法嗎?從JFrame返回一個值到main()

我的主::

public static void main(String[] args) 
{ 
    myFirstFrame m = new myFirstFrame(); 

    m.setVisible(true); 

    String localhost = m.getLh(); 

    System.out.println(localhost); 
} 

我的JFrame ::

public class myFirstFrame extends JFrame 
{ 
    String lh; 

    myDialog myD; 

    public myFirstFrame(JFrame mf) 
    { 
     super(); 
     setTitle("Welcome"); 
     setSize(300, 300); 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

     JMenuItem playg = new JMenuItem("Play game"); 
     simetoxi.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
       myD = new myDialog(myFirstFrame.this); 
       myD.setVisible(true); 

       String lh = myD.getText(); 
       System.out.println(lh + "ASasASas"); 
       dispose(); 
      } 

     }); 

     JMenu game = new JMenu("GAME"); 
     game.add(playg); 
     JMenuBar myBar = new JMenuBar(); 
     myBar.add(game); 
     setJMenuBar(myBar); 
    } 

    public String getLh() 
    { 
     return lh; 
    } 
} 

我的JDialog ::

public class myDialog extends JDialog 
{ 
    JTextField t1; 

    String sname; 

    public myDialog(JFrame fr) 
    { 
     super(fr, true); 
     setTitle("Connect"); 
     setSize(200, 200); 
     setLayout(new FlowLayout()); 
     JLabel l1 = new JLabel("Give the server name"); 
     t1 = new JTextField(15); 
     add(l1); 
     add(t1); 
     JButton okb = new JButton("submit"); 
     okb.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
       sname = t1.getText(); 
       dispose(); 
      } 
     }); 
     add(okb); 
    } 

    public String getText() 
    { 
     return sname; 
    } 
} 
+0

一旦你開始運行Swin g應用程序在此處指定爲應用程序啓動:http://www.javamex.com/tutorials/threads/invokelater.shtml然後您不需要與main()函數進行通信,此時的任何內容都是JFrame及其兒童的責任。 – EpicPandaForce

回答

2

的問題是,當main創建Frame,它不停止並等待該值變爲可用,然後再執行main函數的其餘部分。

有很多方法可以解決這個問題。例如,您可以將它放在main中,而不是將System.out.println(localhost)放在另一個方法中。然後,在Frame中,獲取該值時調用該方法。

如果您確實想要撥打電話號碼main,您必須找到某種方法來生成main區塊,直到該值可用。例如,您可以創建一個BlockingQueue,並嘗試從main中取出值。在Frame事件處理程序中,將所需的值推送到隊列中。

0

主要方法不會等待你的JFrame要經過這些步驟,在你的主要程序,以便調用的吸氣劑(即使你「正確」的

String lh = myD.getText(); 

lh == myD.getText(); 

會不工作 - 將這些信息傳遞給一個可以充分利用它的類/方法,或許在一個單獨的線程中處理它 - 取決於你想要對「localhost」執行什麼操作。