gpt4 book ai didi

Java 在线程的 try-catch 处停止

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:16 25 4
gpt4 key购买 nike

我正在尝试编写一个代码,当它与我的计算机位于同一网络时,它将返回我的树莓派的 IP。这个想法是让它像Samba一样进行广播(广播分辨率最接近原始的NetBIOS机制。基本上,一个寻找名为Trillian的服务的客户端会喊出“Yo!Trillian!你在哪里?”,然后等待具有该名称的机器用 IP 地址回答。来源:Samba 团队)

代码如下:

public class GetIP {
static String url; //global so I can access it after the threads are finished

public class CheckIP extends Thread {
private String url_test;

public CheckIP(String url_t) {
url_test = url_t;
}

public void run(){
try {
result = getHTML(this.url_test); //result = the response from the GET request to this.url_test
} catch (Exception e) {

}

if(result <is what I want>) {
url = this.url_test
System.out.println("Flag 1");
<I'd like to do something here, preferebly kill all other
threads that are trying to connect to an 'unserved' URL>
}
}
}


public static void main(String[] args) throws Exception{

String ip_partial = <my computer's IP without the last part - ex: "192.168.0." , I'll hide the functions to make it short>;

Thread myThreads[] = new Thread[254];
for (int i = 1; i < 255; i++) {
String url_test="http://"+ip_partial+i+":<port + endpoint>";
GetIP getip = new GetIP ();
myThreads[i] = new Thread(getip.new CheckIP(url_test));
myThreads[i].start();
}
for (int i = 1; i < 254; i++) {
System.out.println("Flag 2");
myThreads[i].join(); //todo add catch exception
}
}
}

我可以看到标志 1,并且我确实打印了第一个“for”,所以我知道有 254 个线程正在创建,但是我看不到标志 2。它永远不会显示,无论我等待多长时间。任何想法为什么?

最佳答案

您的代码的问题是 java.lang.ArrayIndexOutOfBoundsException:

您正在执行循环直到 254th index,而您的数组大小本身是 254,这意味着自 java 启动以来存在的索引是 253它从 0 开始索引。

第一个循环也应该运行与第二个循环相同的迭代次数。

for (int i = 1; i < 254; i++) {
/\
||
||
||
This should not be 255 else you'll get OutOfBounds Exception.
}

关于Java 在线程的 try-catch 处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47216435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com