gpt4 book ai didi

java - 线程导致程序崩溃

转载 作者:行者123 更新时间:2023-12-01 22:21:00 25 4
gpt4 key购买 nike

我是 Android 开发新手,但对 Java 并不陌生。

一条黄金法则是永远不要阻塞 GUI 线程,也不要阻塞主线程。

我面临的问题是我的应用程序可以向服务器发送消息,然后服务器显示消息。当我的服务器(PC)将消息发送回我的 Android 应用程序时,该应用程序会收到该消息,这通过 log 方法 可以明显看出。

控制台显示从服务器发送的消息,但 GUI 应用程序不显示,这是因为它卡住了。

我所做的就是在另一个线程中设置一个线程。`主线程 > 线程(连接到服务器)> 线程(监听传入消息)> 线程(Android Gui 线程)。

这里的问题是;程序卡住并且 Activity 停止响应。但控制台窗口确实显示了从服务器发送的消息。

我的问题是,当我没有阻止任何线程时,为什么应用程序会卡住?

private void ConnectButtonPress() {
btnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnConnect.setVisibility(View.GONE);
btnDisconnect.setVisibility(View.VISIBLE);
btnSend.setEnabled(true);
enterET.setEnabled(true);
new Thread(new Runnable() {
public void run(){
try {
socket = new Socket(IPAddressET.getText().toString(), Integer.parseInt(portET.getText().toString())); //connect to server
input = new Scanner(socket.getInputStream());

pw = new PrintWriter(socket.getOutputStream(), true);
pw.println(usersName); //write the message to output stream
pw.flush();

new Thread(new Runnable() {
@Override
public void run() {
while (true){//this is where the problem is
try {
input = new Scanner(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}

String message = input.nextLine();
Log.i("LOL",message);
runOnUiThread(new Runnable() {
@Override
public void run() {
String message = input.nextLine();

displayMessages.append(message +"\n");
}
});
}
}
}).start();



//pw.close();
//pw.close(); //closing the connection
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();




}
});
}

最佳答案

好吧,这个 block :

runOnUiThread(new Runnable() {
@Override
public void run() {
String message = input.nextLine();

displayMessages.append(message +"\n");
}
});

while 循环内无限期地运行,因此会阻塞主线程。为什么需要在主线程中构建 displayMessages ?我想你可以将 displayMessages.append(message +"\n"); 放入 while 循环中。

关于java - 线程导致程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785515/

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