gpt4 book ai didi

Java:尝试 block 在结束之前停止,没有任何异常

转载 作者:行者123 更新时间:2023-12-01 17:19:23 25 4
gpt4 key购买 nike

让我抓狂的是我的程序在 try block 中间停止并在所有 catch block 之后继续!以下是详细信息。我有 AsyncTask

public class BigBitmapLoader extends AsyncTask<Uri, Void, Bitmap>
{

public BigBitmapLoader(ScribblesView scribbles)
{
scribblesRef = new WeakReference<ScribblesView>(scribbles);
}

@Override
protected Bitmap doInBackground(Uri... params)
{
InputStream is;
try
{
ScribblesView scribs = scribblesRef.get();
if (scribs != null)
{
is = scribs.getContext().getContentResolver().openInputStream(params[0]);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return bitmap;
}
}
catch(FileNotFoundException e)
{
Log.e(ERROR_TAG, e.toString());
}
catch(IOException e)
{
Log.e(ERROR_TAG, e.toString());
}
return null;
}

@Override
protected void onPostExecute(Bitmap bitmap)
{
ScribblesView scribs = scribblesRef.get();
if (scribs != null) scribs.setBigBitmap(bitmap);
}

private WeakReference<ScribblesView> scribblesRef;

private static final String ERROR_TAG = "BigBitmapLoader";

}

在 doInBackground() 中,它到达 is.close(),然后立即跳转到所有 catch block 之后的 return null。因此它会跳过返回位图。在这一点上我没有异常(exception)。只是后来当使用返回的位图时我得到了 NPE。有什么想法吗?

最佳答案

嗯,调试器的行号有时会关闭,所以也许这就是问题所在。进行干净的构建。另外,我会将 is.close() 移至finally block 。一般来说,为了确保正确处置资源,这是一个好主意。所以事情会是这样的:

InputStream is = null;
try
{
// do stuff
} catch(FileNotFoundException e)
{
Log.e(ERROR_TAG, e.toString());
} catch(IOException e) {
Log.e(ERROR_TAG, e.toString());
} finally {
if (is != null) {
is.close();
}
}

关于Java:尝试 block 在结束之前停止,没有任何异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817721/

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