循环后Java任务停止

时间:2017-11-22 10:35:59

标签: java multithreading loops task

在我的项目中,我有这段代码。

    Task<Void> task = new Task<Void>() {
    @Override
    protected Void call()  throws Exception {
        do {
            ...
            [do something]
            ...
        } while (true);
        [do other]
        return null;
    }
};
new Thread(task).start();

循环工作正常,但是没有执行循环[do other]的istruction。 你能帮我理解吗?

感谢。

更新 “while(true)”只是一个例子。 循环工作直到条件成立! 真正的命令是“while(x&lt; y)”并且工作正常!

此代码工作

                Callable<Void> task = new Callable<Void>() {
              @Override
              public  Void call()  throws Exception {

                    do {
                        rowBin = new ASN1BinaryModel("000A" , "A0", "80", "54", "31", "0F", "0B", "A0", "80", "54", "31", "0F", "0B", "A0", "80", "54", "31");
                        asn1BinaryTable.getItems().add(rowBin);

                        countTotByte = countTotByte + 16;

                        System.out.println("HEX: " + countTotByte);

                    } while (countTotByte <= len);
                    System.out.println("END LOOP");
                  return null;

此代码无效

                Callable<Void> task = new Callable<Void>() {
              @Override
              public  Void call()  throws Exception {

                    do {
                        tmpAddress = Integer.toHexString(countTotByte).toUpperCase();
                        rowBin = new ASN1BinaryModel(String.format("%4s", tmpAddress).replace(" ", "0") , String.format("%02X", data[countTotByte]), 
                                String.format("%02X", data[countTotByte+1]), String.format("%02X", data[countTotByte+2]), String.format("%02X", data[countTotByte+3]), 
                                String.format("%02X", data[countTotByte+4]), String.format("%02X", data[countTotByte+5]), String.format("%02X", data[countTotByte+6]),
                                String.format("%02X", data[countTotByte+7]), String.format("%02X", data[countTotByte+8]), String.format("%02X", data[countTotByte+9]), 
                                String.format("%02X", data[countTotByte+10]), String.format("%02X", data[countTotByte+11]), String.format("%02X", data[countTotByte+12]), 
                                String.format("%02X", data[countTotByte+13]), String.format("%02X", data[countTotByte+14]), String.format("%02X", data[countTotByte+15]));

                        asn1BinaryTable.getItems().add(rowBin);

                        countTotByte = countTotByte + 16;

                        System.out.println("HEX: " + countTotByte);

                    } while (countTotByte <= len);
                    System.out.println("END LOOP");
                  return null;

3 个答案:

答案 0 :(得分:1)

do { ... } while (true)继续循环播放。

尝试使用变量而不是true,并将此变量设置为false。循环结束,[do other]将被执行。

我不确定您的Task,但更改为CallableExecutorService

以下是一个例子:

public static void main(String[] args) {
    Callable<Void> task = new Callable<Void>() {
        @Override
        public Void call() throws Exception {
            int i = 0;
            do {
                i++;
                System.out.println(i);
            } while (i < 10);
            System.out.println("end");
            return null;
        }
    };

     ExecutorService executor = Executors.newFixedThreadPool(10);
     executor.submit(task);

}

输出:

1
2
3
4
5
6
7
8
9
10
end

答案 1 :(得分:1)

看起来你有一个无限循环。在一些执行循环之后的某些方法中,为了摆脱它,使得x> = y。

答案 2 :(得分:0)

好的,我是白痴......对不起 问题出在byte data [] array。

我读取一个文件并在data [size]中插入字节,其中[size]是文件长度。 在我得到16个字节的时间并向TableView添加行。 问题是最后的X字节,因为不确定它们是16! 这样命令:

String.format("%02X", data[countTotByte+n])
找到第一个字节[]“空”时

失败。

我再次感到抱歉......