我想要一种一致且简单的方法来在JNI代码中引发异常;处理链式异常的东西(隐式地来自env->
ExceptionOccurred方法,或者由参数显式表示,无论哪种方式都不错),并且每次执行此操作时都无需查找构造函数。尽管我可以根据需要从C
++进行翻译,但上述所有内容最好都用C语言编写。
SO上是否有人可以分享这样的东西?
我们只是为要抛出的每种异常类型编写实用程序方法。这里有些例子:
jint throwNoClassDefError( JNIEnv *env, char *message )
{
jclass exClass;
char *className = "java/lang/NoClassDefFoundError";
exClass = (*env)->FindClass( env, className);
if (exClass == NULL) {
return throwNoClassDefError( env, className );
}
return (*env)->ThrowNew( env, exClass, message );
}
jint throwNoSuchMethodError(
JNIEnv *env, char *className, char *methodName, char *signature )
{
jclass exClass;
char *exClassName = "java/lang/NoSuchMethodError" ;
LPTSTR msgBuf;
jint retCode;
size_t nMallocSize;
exClass = (*env)->FindClass( env, exClassName );
if ( exClass == NULL ) {
return throwNoClassDefError( env, exClassName );
}
nMallocSize = strlen(className)
+ strlen(methodName)
+ strlen(signature) + 8;
msgBuf = malloc( nMallocSize );
if ( msgBuf == NULL ) {
return throwOutOfMemoryError
( env, "throwNoSuchMethodError: allocating msgBuf" );
}
memset( msgBuf, 0, nMallocSize );
strcpy( msgBuf, className );
strcat( msgBuf, "." );
strcat( msgBuf, methodName );
strcat( msgBuf, "." );
strcat( msgBuf, signature );
retCode = (*env)->ThrowNew( env, exClass, msgBuf );
free ( msgBuf );
return retCode;
}
jint throwNoSuchFieldError( JNIEnv *env, char *message )
{
jclass exClass;
char *className = "java/lang/NoSuchFieldError" ;
exClass = (*env)->FindClass( env, className );
if ( exClass == NULL ) {
return throwNoClassDefError( env, className );
}
return (*env)->ThrowNew( env, exClass, message );
}
jint throwOutOfMemoryError( JNIEnv *env, char *message )
{
jclass exClass;
char *className = "java/lang/OutOfMemoryError" ;
exClass = (*env)->FindClass( env, className );
if ( exClass == NULL ) {
return throwNoClassDefError( env, className );
}
return (*env)->ThrowNew( env, exClass, message );
}
这样,很容易找到它们,您的代码完成编辑器将帮助您键入它们,并且您可以传递简单的参数。
我确信您可以扩展它来处理链式异常或其他更复杂的方法。这足以满足我们的需求。
我有一个rest服务,它将抛出一个异常,我想知道什么将是最好的方式来处理这一点。 我想知道这是rest服务中处理异常的正确方式吗? 我在用泽西。
问题内容: 我正在编写一个Java程序,该程序读取一个单词文件。程序至关重要地依赖于此文件,因此,无论出于何种原因,在读取文件时都出现IOException,我确实希望程序结束。 结束程序的最佳方法是什么?我认为我被迫将文件读取包围在try / catch块中,因此我应该在catch中添加一个内部吗?例如,我应该做以下事情吗? 问题答案: 如果让异常一直传播到方法,程序将结束。无需调用,只需允许异
我正在使用Mojang API从Minecraft玩家的用户名返回UUID。此方法在参数(我们想要知道UUID的播放器的用户名)中接受一个字符串。为了使用API的resultat,我使用SimpleJSON库(将JSON结果解析为要返回的字符串)。 我的方法抛出2个检查过的异常:IOExeption和Parse异常,因为我想要。当错误的用户名(因此不存在用户名)时,API返回一个空JSON对象,在
我正在使用核心java开发一个测试框架。在我的应用程序中,我有一个父方法,它调用十个不同的子方法,每个方法都可以抛出自己的异常。要求是提供有关父方法执行的详细日志信息,其中包含执行该方法所用的总时间、执行每个子方法所用的时间、记录任何异常等信息。为此,我使用了多个try-catch-finally块。 我的问题是,如果其中一个子方法抛出异常,跳过剩余子方法执行的最佳方法是什么?例如:如果方法4抛出
我有一个可为空的变量,通过它我可以通过获取(同样为空)。 我想做的是
我的类有一个名为的私有对象,其构造函数需要另一个类的实例。 如果失败,如何引发异常?