2016-11-20 74 views
2

我不知道如何解决这个问题,但我的代码的目的是遍历csv文件,用户搜索某个项目。我用CSVReader通过类型列表的字符串数组读取了我的项目,所以这不是问题。等待在for循环中按下按钮?

当用户搜索一个项目时,我创建了一个for循环遍历我的csv文件的行和列,一旦找到就会输出一些代码。

我想要做的事情是,一旦找到该项目,它将打开另一个框架,并且用户将再次通过使用文本字段进行输入。然后再按下另一个按钮,从而继续我们在其他for循环中停止的地方,以便执行一些可以进行更改的代码。我只能遍历for循环一次,否则行和列的值将会增加一倍。

这里是我的代码:

editTigerFrame obj = new editTigerFrame(); 

    String getLocation = obj.editLocationField.getText(); 
    javax.swing.JButton saveButt = obj.saveEditButton; 


    try{ 

     String strSearch = searchSerialField.getText(); 

     CSVReader reader = new CSVReader(new FileReader("test.txt"), ','); 
     List<String[]> myEntries = reader.readAll(); 
     reader.close(); 

     for (int row = 0; row < myEntries.size(); row++) 
     { 
      for (int column = 0; column < myEntries.get(row).length; column++) 
      { 
       if (myEntries.get(row)[column].trim().equalsIgnoreCase(strSearch)) 
       { 
         System.out.println("Found - Your item is on row: " + row + ", column: " + column); 

         //If serial is found, open the editTigerFrame to edit details 
         new editTigerFrame().setVisible(true); 

         //Replace with user input 
         //When button is pressed in other class, execute this code 
         System.out.println("Saved"); 
         String newLocation = getLocation; 

正如你附近的代码片段的底部看到,一旦按下按钮,其他形式,执行代码来改变一个字符串。

有没有办法在for循环中暂停并继续?

谢谢你的帮助,如果你需要其他的东西,请让我知道,我会提供。

+0

对循环和按钮点击使用通用的'flag'可以很方便。更新按钮点击处理程序上的'flag',并在你想要“break”的最内层循环中使用相同的'flag'。使用新的'Thread'将会使其生效。 – Arvind

回答

0

有没有办法在for循环中暂停并继续?

也许显示一个JOptionPane要求使用输入?

查看How to Make Dialogs上的Swing教程部分以获取更多信息和示例。

如果你有更复杂的数据要收集,那么你会使用模态JDialog

+0

一旦对话框打开并要求用户输入,我仍然需要暂停for循环,否则代码将继续,因为我没有在文本字段中输入任何内容。 – juiceb0xk

+0

@ juiceb0xk,是的,当JOptionPane/JDialog可见时,循环暂停,并在对话框关闭后立即重新启动。因此,在继续循环之前,当对话框关闭时,您需要获取数据并进行处理。 – camickr

1

您可以使用break;离开for循环。在离开前记住行,列等,并用记住的值启动循环。

我认为将for循环放入自己的方法是一个好主意。这同样适用于输入的“弹出”。那么你可以在必要时给他们打电话。 ^^ - d

编辑:一些示例代码:

 package pauseLoop; 


public class pauseLoop { 
     int rows; 
     int columns; 
     int something; 
     static int[] a; 

    public static void main(String[] gnarrr){ 
     pauseLoop myLoop = new pauseLoop(); 

     myLoop.Loop(); 

     myLoop.Loop(); 
    } 

    public pauseLoop(){ 
     this.rows = 0; 
     this.columns = 0; 
     this.something = 11; //just random data 
    } 

    public void Loop(){ 
     System.out.println("starting loop with: rows = " + rows + " columns = " + columns + " something = " + something); 

     for(int count = rows; count < 99999 ;count++){ 
      /* do some black magic ;) */ 

      if(count % 23 == 22){ // !condition to pause the loop! i chose something that can occur more than once 
       this.rows += count; //remember rows 
       this.columns += 5; // columns got 5 more by some black magic (nested loop or so) 
       this.something += 31; //just some data needed to be remembered for later 
       System.out.println("leaving loop with: rows = " + rows + " columns = " + columns + " something = " + something+ "\n"); 
       break; //leave loop! 
      } 
     } 
    } 

} 

息率如果运行下面的输出:

开始循环用:行= 0列= 0的东西= 11

离去loop with:rows = 22 columns = 5 something = 42

starting loop with:rows = 22 columns = 5 something = 42

离开循环:行= 44列= 10东西= 73

快乐编码!

+0

如何使用记忆值重新启动循环? – juiceb0xk

+0

@ juiceb0xk添加了示例代码^^ –

+0

@ juiceb0xk调整后的代码,使循环真正恢复“行” - 原则保持相同艰难^^ –