在我的项目中,我有这段代码。
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;
答案 0 :(得分:1)
do { ... } while (true)
继续循环播放。
尝试使用变量而不是true
,并将此变量设置为false
。循环结束,[do other]
将被执行。
我不确定您的Task
,但更改为Callable
和ExecutorService
:
以下是一个例子:
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])
找到第一个字节[]“空”时失败。
我再次感到抱歉......