Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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任务循环后停止_Java_Multithreading_Loops_Task - Fatal编程技术网

Java任务循环后停止

Java任务循环后停止,java,multithreading,loops,task,Java,Multithreading,Loops,Task,在我的项目中,我有这个代码 Task<Void> task = new Task<Void>() { @Override protected Void call() throws Exception { do { ... [do something] ... } while (true); [do other]

在我的项目中,我有这个代码

    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();
Task Task=新任务(){
@凌驾
受保护的Void调用()引发异常{
做{
...
[做点什么]
...
}虽然(正确);
[做其他事情]
返回null;
}
};
新线程(任务).start();
循环工作正常,但未执行循环外指令[do other]。 你能帮我理解吗

谢谢

更新 “while(true)”只是一个例子。 循环将一直工作,直到条件为真! 真正的命令是“while(x 此代码有效

                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 task=newcallable(){
@凌驾
public Void call()引发异常{
做{
rowBin=新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(“十六进制:“+countTotByte”);
}while(countTotByte
do{…}while(true)
保持循环

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

我不确定您的
任务
,但已更改为
可调用
执行服务

以下是一个例子:

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);

}
do{…}while(true)
保持循环

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

我不确定您的
任务
,但已更改为
可调用
执行服务

以下是一个例子:

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);

}

看起来你有一个无限循环。在一些循环执行之后,以某种方式使sur x>=y以摆脱它。

看起来你有一个无限循环。在一些循环执行之后,以某种方式使sur x>=y以摆脱它。

好的,我是白痴……对不起 问题出在字节数据[]数组中

我读取一个文件并在数据[size]中插入字节,其中[size]是文件长度。 在我获得16字节的时间并将行添加到TableView之后。 问题是最后的X字节,因为不确定它们是否为16! 通过这种方式,命令:

String.format("%02X", data[countTotByte+n])
当发现第一个字节[]“空”时失败

我再次抱歉…

好吧,我是个白痴…抱歉 问题出在字节数据[]数组中

我读取一个文件并在数据[size]中插入字节,其中[size]是文件长度。 在我获得16字节的时间并将行添加到TableView之后。 问题是最后的X字节,因为不确定它们是否为16! 通过这种方式,命令:

String.format("%02X", data[countTotByte+n])
当发现第一个字节[]“空”时失败


我再次感到抱歉…

我很抱歉,“while(true)”就是一个例子。循环运行直到一个变量是另一个变量的次变量:while(xx>=y
循环将退出。我确定。我已经用打印输出测试了循环,并且运行良好。没有更多的代码(请参阅:sscce.org)很难说为什么。RobAu,我尝试了你的解决方案并开始工作……但是,我认为问题在于我在[do sometingh]中的指示我在我的问题中添加了更新对不起,“while(true)”就是一个例子。循环运行直到一个变量是另一个变量的次变量:while(xx>=y循环将退出。我确定。我已经用打印输出测试了循环,工作正常。如果没有更多的代码(请参阅:sscce.org),很难说为什么。RobAu,我尝试您的解决方案并工作……但是,我认为问题在于我在[DoSometingh]中的指令我将更新添加到我的问题中,循环工作正常。在[do something]中,我设置了循环的退出值,循环工作正常。在[do something]中我从循环设置退出值。可能一个写入变量是共享的,在线程外声明,在引擎盖下创建外部变量的副本,并在变量不稳定时在特定点上同步。使这样一个变量
不稳定
。可能一个写入变量是共享的,在线程外声明引擎罩会复制外部变量,并在变量不稳定时在特定点上同步。使这样的变量不稳定。