Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在for循环中等待按钮按下?_Java_Swing_Csv_For Loop_Pause - Fatal编程技术网

Java 在for循环中等待按钮按下?

Java 在for循环中等待按钮按下?,java,swing,csv,for-loop,pause,Java,Swing,Csv,For Loop,Pause,我不知道该如何解决这个问题,但我的代码的目的是遍历csv文件,用户搜索某个项目。我用CSVReader通过类型为list的字符串数组读取我的项,所以这不是问题 当用户搜索一个项目时,我创建了一个for循环来迭代我的csv文件的行和列,一旦找到,就会输出一些代码 我想做的是,一旦找到项目,它将打开另一个框架,用户将再次通过使用文本字段进行输入。然后按下另一个按钮,继续我们在另一个for循环中停止的地方,以便执行一些进行更改的代码。我只能在for循环中迭代一次,否则行和列的值将在迭代两次后加倍 这是

我不知道该如何解决这个问题,但我的代码的目的是遍历csv文件,用户搜索某个项目。我用CSVReader通过类型为list的字符串数组读取我的项,所以这不是问题

当用户搜索一个项目时,我创建了一个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;
editTigerFrame obj=新的editTigerFrame();
字符串getLocation=obj.editLocationField.getText();
javax.swing.JButton saveButt=obj.saveEditButton;
试一试{
String strearch=searchSerialField.getText();
CSVReader reader=newcsvreader(newfilereader(“test.txt”),',';
List myEntries=reader.readAll();
reader.close();
对于(int row=0;row
正如您在代码段底部附近看到的,一旦按下另一个表单上的按钮,就可以执行代码来更改字符串

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


谢谢您的帮助,如果您还需要什么,请告诉我,我会提供。

您可以使用
中断;
离开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!
            }
        }
    }

}
package-pauseLoop;
公共类pauseLoop{
int行;
int列;
智力的东西;
静态int[]a;
公共静态void main(字符串[]gnarrr){
pauseLoop myLoop=新的pauseLoop();
myLoop.Loop();
myLoop.Loop();
}
公共pauseLoop(){
这是0.rows=0;
此参数为0;
this.something=11;//只是随机数据
}
公共void循环(){
System.out.println(“开始循环:行=“+rows+”列=“+columns+”something=“+something”);
用于(整数计数=行;计数<99999;计数++){
/*做一些黑魔法;)*/
如果(计数%23==22){//!暂停循环的条件!我选择了可以发生多次的内容
this.rows+=count;//记住行
this.columns+=5;//通过某种黑魔法(嵌套循环左右)又得到了5个列
this.something+=31;//只是需要记住一些数据以便以后使用
System.out.println(“使用以下内容离开循环:rows=“+rows+”columns=“+columns+”something=“+something+”\n”);
break;//离开循环!
}
}
}
}
如果运行,则产生以下输出:

开始循环:行=0列=0某物=11

离开循环:行=22列=5某物=42

开始循环:行=22列=5行=42

离开循环:行=44列=10某物=73

快乐编码

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

可能会显示一个
JOptionPane
请求使用输入

有关更多信息和示例,请查看上的Swing教程部分


如果您要收集更复杂的数据,则可以使用模式
JDialog

一旦对话框打开并要求用户输入,我仍然需要暂停for循环,否则代码将继续,就像我没有在文本字段中输入任何内容一样。@juiceb0xk,是,当JOptionPane/JDialog可见且我将在对话框关闭后立即重新启动。因此,在继续循环之前,您需要在对话框关闭时获取数据并对其进行处理。如何使用记住的值重新启动循环?@juiceb0xk调整代码,以便循环真正恢复为“行”-原则保持不变^^^^对于循环和按钮单击使用通用的
标志可以很方便。更新按钮单击处理程序上的
标志
,并在最内部的循环中使用相同的
标志
,在其中你想要
中断
。使用新的
线程
将使其有效。