如何修复 java.lang.IllegalThreadStateException?
How to fix java.lang.IllegalThreadStateException?
在我的应用程序中,我想在 CountDownTimer 中使用一个线程,为此我编写了以下代码。
但是 运行 应用程序在几秒钟后显示 LogCat 中的错误。
我的代码:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_auction_detail_bid, null);
new CountDownTimer(newCalculateTime, 1000) {
public void onTick(long millisUntilFinished) {
if (millisUntilFinished / 1000 <= newCanOfferBeforeTime) {
Constants.currentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
getlast6BidData();
}
});
}
}
public void onFinish() {
}
}.start();
return v;
}
private void getlast6BidData() {
thread = new Thread() {
@Override
public void run() {
getUpdateBidsList(Constants.detailAuctionGmodel.getRes().getDetail().getCalculate_end());
try {
sleep(last6RunStartTimer);
getlast6BidData();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
LogCat 错误:
E/UncaughtException: java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:722)
at com.app.android.Fragments.AuctionDetailBidFragment.getlast6BidData(AuctionDetailBidFragment.java:744)
at com.app.android.Fragments.AuctionDetailBidFragment.access0(AuctionDetailBidFragment.java:73)
at com.app.android.Fragments.AuctionDetailBidFragment.run(AuctionDetailBidFragment.java:737)
我该如何解决?
尝试使用 Thread.isAlive()
方法检查您的线程是否处于活动状态。
private void getlast6BidData() {
thread = new Thread() {
@Override
public void run() {
getUpdateBidsList(Constants.detailAuctionGmodel.getRes().getDetail().getCalculate_end());
try {
sleep(last6RunStartTimer);
getlast6BidData();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
if (!thread.isAlive()){
thread.start();
}
}
编辑
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
getlast6BidData();
}
});
在我的应用程序中,我想在 CountDownTimer 中使用一个线程,为此我编写了以下代码。
但是 运行 应用程序在几秒钟后显示 LogCat 中的错误。
我的代码:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_auction_detail_bid, null);
new CountDownTimer(newCalculateTime, 1000) {
public void onTick(long millisUntilFinished) {
if (millisUntilFinished / 1000 <= newCanOfferBeforeTime) {
Constants.currentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
getlast6BidData();
}
});
}
}
public void onFinish() {
}
}.start();
return v;
}
private void getlast6BidData() {
thread = new Thread() {
@Override
public void run() {
getUpdateBidsList(Constants.detailAuctionGmodel.getRes().getDetail().getCalculate_end());
try {
sleep(last6RunStartTimer);
getlast6BidData();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
LogCat 错误:
E/UncaughtException: java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:722)
at com.app.android.Fragments.AuctionDetailBidFragment.getlast6BidData(AuctionDetailBidFragment.java:744)
at com.app.android.Fragments.AuctionDetailBidFragment.access0(AuctionDetailBidFragment.java:73)
at com.app.android.Fragments.AuctionDetailBidFragment.run(AuctionDetailBidFragment.java:737)
我该如何解决?
尝试使用 Thread.isAlive()
方法检查您的线程是否处于活动状态。
private void getlast6BidData() {
thread = new Thread() {
@Override
public void run() {
getUpdateBidsList(Constants.detailAuctionGmodel.getRes().getDetail().getCalculate_end());
try {
sleep(last6RunStartTimer);
getlast6BidData();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
if (!thread.isAlive()){
thread.start();
}
}
编辑
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
getlast6BidData();
}
});