当前位置: 首页 > 知识库问答 >
问题:

Java 而(真)循环永远不会在没有系统的情况下结束

米子轩
2023-03-14

我有下面的代码与ArrayList填充在其他Java类,这是一个线程(这总是填充,我每次都检查),然后我在Main类有问题的块,而(真)和问题是,如果我评论或删除行永远不会结束System.out.println(IDS.size());

虽然线程负责完成我需要的信息,但在所有信息都完成之前,我无法显示结果。这是while(true)块的原因。

public static ArrayList<String> IDS = new ArrayList<String>();
//this arraylist is filled in other classes correctly (each Thread add a element -> 10 in total)


//here is the problem
while (true) {
    //if I comment the next system.out.println line
    //the loop never ends and never breaks
    System.out.println(IDS.size());
    if(IDS.size()==10) {
        break;
    }
 }

//when the array is filled with the 10 elements, I show all the info
for (int k = 0; k < impresoras.size(); k++) {
    System.out.println(impresoras.get(k).ID);   
}

我不知道为什么会发生这种情况,有人可以帮忙吗?提前致谢。

共有1个答案

曾泳
2023-03-14

最后,我使用线程的连接方法来避免while-true循环。所以我只需要调用下一个方法,然后执行System.out。我的项目的println,将在所有线程结束工作时打印。

public static ArrayList<MyThread> threadList = new ArrayList<MyThread>();

public static void openFileAndCreateThreads(String fileName) {
        String line = null;
        FileReader fileReader = null;
        BufferedReader bufferedReader = null;
        try {
            fileReader = new FileReader(fileName);
            bufferedReader = new BufferedReader(fileReader);

            while ((line = bufferedReader.readLine()) != null) {
                String[] line_parts = line.split(";");

                MyThread t= new MyThread(line_parts[0].trim(), line_parts[1], line_parts[2]);
                
                threadList.add(t);
                t.start();
            }
            for (int j=0;j<threadList.size();j++) {
                try {
                    threadList.get(j).join();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            
            }
            bufferedReader.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
            } catch (Exception ex) {
            }
        }
    }
 类似资料:
  • 我想为OpenComputers(minecraft mod)编写一个曼卡拉游戏,它使用Lua。然而,曼卡拉要求必须进入它中间的主循环(六个可供选择的壶),退出中间的循环(把你的最后一个石头放入空壶),从循环内部进入循环(把最后一个石头放入壶中,必须从那个壶中捡起所有的石头)。 我可以很容易地在两边做曼卡拉,用一个boolean值和一个if语句。 对于不熟悉曼卡拉的人,我有一个快速的流程图来解释我

  • 有没有一种方法可以在不启动Android Studio的情况下运行模拟器。可能是从命令行。我知道这个功能在旧版本中是可用的,从那以后就消失了。但也许有人知道怎么做了?

  • 问题内容: 我正在尝试使用pyodbc处理一个非常大的查询,我需要遍历所有行,而不必使用fetchall()一次加载所有行。 是否有一个良好且有原则的方法来做到这一点? 问题答案: 当然,请使用循环。 http://code.google.com/p/pyodbc/wiki/Cursor#fetchone

  • 用户应该输入一个4位数的数字,我需要反向它我导入扫描并收到了来自用户的答案,但是如何反向呢?例如,如果用户键入9876,它将打印6789?我应该用%吗?

  • 问题内容: 抱歉,这听起来太简单了。我是Java的新手。 这是我用来检查的一些简单代码。当我运行它时,我无法停止它。我以为如果不写任何输入并按,就可以避免循环。 有人可以向我解释在这种情况下如何工作吗? 问题答案: 从System.in读取时,默认情况下是从键盘读取的,这是一个无限的输入流……它的行数与用户希望输入的行数相同。我认为发送EOF的控制序列可能会起作用,例如CTL-Z(或者是CTL-D

  • 我使用javap将一个java类文件反汇编成程序集。那么,我可以在没有操作系统的情况下运行javap命令生成的汇编代码吗?