java - 为什么我在运行 java 程序时会收到此消息?

标签 java c++ java-native-interface

Java 代码:

package Package;

public class MyExceptionTester {

private native void compute() throws Exception;

public static void main(String... args) {
    try {
        MyExceptionTester met = new MyExceptionTester();
        met.compute(); // This method will throw an exception which gets printed from the catch block
    } catch(Exception exc) {
        System.out.println("From Java :" + exc);
    }
}

static {
    System.loadLibrary("MyExceptionTester");
 }
}

C++ 代码:

#include "iostream"
#include "Package_MyExceptionTester.h"

void Java_Package_MyExceptionTester_compute
   (JNIEnv *env, jobject obj) {
        jthrowable exc;
        try {
            jint i = 1/0;
            throw "C++ Message : Hey ! Can't Divide By Zero";
        } catch(char *str) {
            jclass excClass = env->FindClass("java/lang/Exception");
            if(excClass == NULL) {
                    return;
                }
            env->ThrowNew(excClass,str);
          }

当我在包含 dll 后运行 java 程序时,我收到以下消息:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094) at pc=0x65c4121a, pid=5292, tid=6000 
#
# JRE version: 7.0
# Java VM: Java HotSpot(TM) Client VM (20.0-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [MyExceptionTester.dll+0x121a] 
#
# An error report file with more information is saved as:
# W:\elita\jnitesters\workspace\java\JNI\build\classes\hs_err_pid5292.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

为什么我会收到这条消息?为什么我看不到应该是从 java catch block 打印的消息的输出。

最佳答案

 jint i = 1/0;
 throw "C++ Message : Hey ! Can't Divide By Zero";

此异常不会被您的 try/catch block 捕获,因为程序在 throw 语句之前崩溃。除以 0 不是您可以捕捉到的异常。

也许有帮助:

int d = 0;
jthrowable exc;
try 
{
    if ( d == 0 )
        throw "C++ Message : Hey ! Can't Divide By Zero";
    jint i = 1/d;
} catch(char *str) 
{
    jclass excClass = env->FindClass("java/lang/Exception");
    if(excClass == NULL) 
    {
       return;
    }
    env->ThrowNew(excClass,str);
}

关于java - 为什么我在运行 java 程序时会收到此消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513700/

相关文章:

java - 如何在运行时更改 JFrame 中的 JPanel

java - 建议需要代码共享 现场 异地

java - 如何覆盖默认的 spring security XML 配置?

c++ - Linux 上的 Qt Phonon - 没有这样的文件或目录

java - 将 Java 套接字文件描述符传递给 C 二进制文件的最有效方法

java - spring JPA的FindBy在传递空参数时使线程挂起

c++ - Karp Rabin 中的质数和 block 长度

c++ - 使用 ifstream 查找大文件

java - "UnsatisfiedLinkError: Native method not found"但命名正确吗?

java - 从 native 代码 (JNI/NDK) 创建、填充和返回二维字符串数组