2013-08-26 15 views
0

我想從Java中的自定義JFrame接收選定的選項。當在NetBeans中以調試模式運行時(當循環內部存在斷點時),代碼可以正常工作,但不能實時運行。雖然迴路沒有反應的Java當收到選項

boolean keepgoing = true; 
while (keepgoing) { 
    if (ioFrame.getOption() == 0) { 
     ioFrame.setVisible(false); 
     keepgoing = false; 
     //more code 
    } 
    else if (ioFrame.getOption() == 1) { 
     ioFrame.setVisible(false); 
     keepgoing = false; 
     //more code 
    }   
} 

ioFrame.getOption()返回-1,直到按鈕被點擊了的JFrame,然後根據按鈕點擊它是0或1

ioFrame動作偵聽器:

JButton loadButton = new JButton("Load Inventory"); 
class ChoiceListener implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     initialOption = 0; 
    } 
} 
loadButton.addActionListener(new ChoiceListener()); 

JButton updateButton = new JButton("Update Inventory"); 
class ChoiceListener2 implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     initialOption = 1; 
    } 
} 
updateButton.addActionListener(new ChoiceListener2()); 
+2

您應該使用事件處理而不是while循環。詳情請參閱:http://docs.oracle.com/javase/tutorial/uiswing/events/ – svz

+0

嘗試發佈[SSCCE](http://www.sscce.org)以獲得更好的幫助。有了這些代碼,我不能說你什麼都不清楚。 – nachokk

+0

像svz建議的一樣,更好地使用事件 - 使用busy-wait是一個糟糕的做法:http://en.wikipedia.org/wiki/Busy_waiting – alfasin

回答

0

不管什麼時候返回-1它通常意味着對象不存在或不存在。你確定你沒有忘記初始化你需要的對象/變量嗎?在調試模式下,Netbeans爲您做了很多工作(甚至初始化了一些東西),這些工作在編譯和執行IDE時沒有完成。

0

正如其他人所說,我認爲問題來自您的循環應該幾乎需要您所有計算機資源的事實。它永遠不會停止循環!

問題是您沒有提供有關ioframe的任何代碼。

如果它是可編輯的並且選項值由JCheckbox給出(我們在此稱爲chk)。 您可以添加一個偵聽器(ItemListenerActionlistener ...)。

這裏是ioFrame要實現一個例子:

chk.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     this.setVisible(chk.isSelected()); 
    } 
}); 

另一種方法可能是在ioFrame方法允許listners添加到其組件的創建。

public void addVisibleChkActionListener(ActionListener ac){ 
    chk.addActionListener(ac); 
}