java 这是什么java错误代码1603?

JAVA-异常的捕获及处理 -
- ITeye技术网站
异常的捕获及处理
异常的概念:
在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。
在Java中,将异常情况分为Exception(异常)和Error(错误)两大类。
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
所谓异常处理,就是指程序在出现问题时依然可以正确的执行完
异常类的层次和主要子类
异常类(java.lang.Exception)继承于java.lang.Object中的java.lang.Throwable类。异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种 :
继承于RuntimeException
除了执行异常外,其余的Exception子类属于检查异常类
执行异常及其用途
包中多数异常的基类
算术错误,如除以
方法收到非法参数
数组下标出界
字符串越界
String转换为指定的数字类型
试图访问对象引用
试图违反安全性
不能加载请求的类
检查异常及其用途
异常的根类
不能找到文件
对类的访问被拒绝
请求的方法不存在
异常处理格式
异常处理方法有两种:
一种方法是使用try…catch…finally结构对异常进行捕获和处理;
另一种方法是通过throws和throw抛出异常。
捕获异常try-catch-finally
Java的异常处理是通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出(throws)一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可要可不要)。
可能出现异常的语句
异常类异常对象
异常类异常对象
异常的出口
1、try语句
捕获异常的第一步就是用try {…}语句指定了一段代码,该段代码就是一次捕获并处理异常的范围。在执行过程中,该段代码可能会产生并抛弃一个或多个异常,因此,它后面的catch语句进行捕获时也要做相应的处理。
2、catch语句
每个try语句必须伴随一个或多个catch语句,用于捕获try代码块所产生的异常并做相应的处理。 catch语句有一个形式参数,用于指明其所能捕获得异常类型,运行时系统通过参数值把被抛弃的异常对象传递给catch语句
3、finally语句
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理, finally所指定的代码都要被执行
int i = 10 ;
int j = 0 ;
System.out.println("========== 计算开始
int temp = i /
System.out.println("计算结果:
catch(ArithmeticException e){
System.out.println("出现了数学异常:
System.out.println("========== 计算结束
int i = 0 ;
int j = 0 ;
System.out.println("========== 计算开始
i = Integer.parseInt(args[0]) ;
j = Integer.parseInt(args[1]) ;
int temp = i /
System.out.println("计算结果:
}catch(ArithmeticException e){
System.out.println("出现了数学异常:
}catch(NumberFormatException e){
System.out.println("输入的不是数字:
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("输入的参数个数不对:
System.out.println("不管是否有异常,我都执行。
System.out.println("========== 计算结束
通过throws和throw抛出异常
throws方法:
throws关键字的最大好处是:在方法中不处理任何的异常,而交给被调用处处理。
类型 方法名(参数) throws 异常类
如:public int read() throws IOException { … }
throws子句中可以同时指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们
public int div(int i,int j) throws ArithmeticException
// 除数为异常
return i /
public static void main(String args[]){
Math m = new Math() ;
int temp = m.div(10,0) ;
System.out.println(temp) ;
}catch(Exception e){
e.printStackTrace() ;
// 打印异常
在程序中可以使用throw关键字人为的抛出一个异常。
在异常处理中,实际上每次产生异常的时候都是产生了一个异常类的实例化对象。那么此时,也可以通过抛出异常对象的方式完成。
public static void main(String args[]){
throw new Exception("抛着玩的。// 人为抛出
}catch(Exception e){
System.out.println(e) ;
自定义异常类:
创建自定义异常类,继承类
//构造方法
{ super(ErrorMessagr); }
//父类构造方法
定义方法,抛出异常
if (number1 & 0 || number2 & 0)
//判断方法中参数是否满足指定条件
throw new MyException("不可以使用负数//错误信息
if (number1 & 10000 || number2 & 10000) //判断方法中参数是否满足指定条件
throw new MyException("数值太大了//错误信息
return (number1 + number2) / 2;
//将参数的平均值返回
public static void main(String args[])throws IOException
//try代码块处理可能出现异常的代码
int result = avg(-);
//调用方法
System.out.println("平均工资://将方法的返回值输出
catch (MyException e)
{ System.out.println(e) ;}
//输出异常信息
public static void main(String args[]){
int i = 0 ;
int j = 0 ;
System.out.println("========== 计算开始
i = Integer.parseInt(args[0]) ;
j = Integer.parseInt(args[1]) ;
int temp = i /
System.out.println("计算结果:
}catch(ArithmeticException e){
System.out.println("出现了数学异常:
}catch(NumberFormatException e){
System.out.println("输入的不是数字:
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("输入的参数个数不对:
}catch(Exception e){
System.out.println("其他异常:
System.out.println("** 不管是否有异常,我都执行。
System.out.println("========== 计算结束
注意:捕获更细的异常要放在捕获更粗的异常之前。
浏览 33878
浏览: 46874 次
来自: 深圳
字符串最常用4个操作:拼接 比较是否一样, 求长度 求第n个字 ...java中常见的五种异常_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java中常见的五种异常
|0|0|文档简介
总评分0.0|
&&这个异常我们在操作数组的时候会经常遇到,异常的解释是“数组下标越界”
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢本帖子已过去太久远了,不再提供回复功能。什么是错的这个调用Java方法?-java,c,jni,jnienv-CodeGo.net
什么是错的这个调用Java方法?
我试图从代码调用。 C代码监听到任何Escape,Shift,Ctrl按键,然后调用哪个键被按下的说服力。以下是在这方面发挥作用的片段。
Ç片段:
mid = (*env)-&GetMethodID(env,cls,"callBack","(Ljava/lang/S)V");
if(called)
switch(param) {
case VK_CONTROL:
printf("Control pressed !\n");
(*Env)-&CallVoidMethodA(Env,Obj,mid,"11"); // calling the java method
case VK_SHIFT:
printf("Shift pressed !\n");
(*Env)-&CallVoidMethodA(Env,Obj,mid,"10"); // calling the java method
case VK_ESCAPE:
printf("Escape pressed !\n");
(*Env)-&CallVoidMethodA(Env,Obj,mid,"1B"); // calling the java method
printf("The default case\n");
Java代码片段:
public void callBack(String key) {
String x = KeyEvent.getKeyText(Integer.parseInt(key, 16));
System.out.println(x);
当我运行该程序,然后按Escape关键我得到这个在控制台上:
Escape pressed !
# A fatal error has been detected by the Java Runtime Environment:
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x5c8b809a, pid=7588, tid=8088
# JRE version: 7.0
# Java VM: Java HotSpot(TM) Client VM (20.0-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# V [jvm.dll+0x19809a]
# An error report file with more information is saved as:
# W:\UnderTest\NetbeansCurrent\KeyLoggerTester\build\classes\hs_err_pid7588.log
# If you would like to submit a bug report, please visit:
CodeGo.net
我知道我调用Java函数的方法不对,但我不知道我在哪里错了。从输出,它满足的情况下 CodeGo.net,当我按下Escape键,然后发生意外错误。
链接到日志文件
由mavroprovato答案后,我仍然得到错误。
我编辑是这样的:
(*Env)-&CallVoidMethodA(Env,Obj,mid,(*Env)-&NewStringUTF(Env,"1B"));
完整的代码版本1
完整的代码版本2
本文地址 :CodeGo.net/464820/
-------------------------------------------------------------------------------------------------------------------------
1. 在JVM崩溃的JNIEnv这不是一个有效的。还有其他问题上与代码。
太阳JNI是提供非常有关线程。
下面的部分是
创建JNI_OnLoad函数在你的代码。当库被加载它就会被调用。然后缓存JavaVM指针是跨线程有效。另一种方法是调用(*env)-&GetJavaVM在initializeJNIVars函数,但我更喜欢优先个。
在你的initializeJNIVars你可以保存obj通过调用参考Obj = (*env)-&NewGlobalRef(obj)。
在LowLevelKeyboardProc你将要得到的env指针:AttachCurrentThread(JavaVM *jvm, JNIEnv &env, NULL);编辑
好了,下面是你应该添加到搞不定的代码,我已经尝试过自己和它的作品。注:我没有分析你的代码实际上是这样做,我只是做了得到它的工作修正。
添加这些变量的其他全局变量中:
static JavaVM *javaVM = NULL;
static jmethodID callbackMethod = NULL;
static jobject callbackObject = NULL;
你可以删除你的cls,mid,Env和Obj变量矿代替。
创建您缓存的JavaVM指针:
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
JNIEnv *env = 0;
if ((*jvm)-&GetEnv(jvm, (void**)&env, JNI_VERSION_1_4)) {
return JNI_ERR;
return JNI_VERSION_1_4;
改变你initializeJNIVars看起来如下所示:
void Java_keylogger_TestKeys_initializeJNIVars(JNIEnv *env, jobject obj) {
jclass cls = (*env)-&GetObjectClass(env,obj);
callbackMethod = (*env)-&GetMethodID(env, cls, "callBack", "(Ljava/lang/S)V");
callbackObject = (*env)-&NewGlobalRef(env, obj);
if(cls == NULL || callbackMethod == NULL) {
printf("One of them is null \n");
called = TRUE;
终于在您的LowLoevelKeyboardProc代码 CodeGo.net,你将需要添加以下内容:
WPARAM param = kbhook-&vkC
jint rs = (*javaVM)-&AttachCurrentThread(javaVM, (void**)&env, NULL);
if (rs != JNI_OK) {
return NULL; // Or something appropriate...
case VK_ESCAPE:
printf("Escape pressed !\n");
jstring message = (*env)-&NewStringUTF(env, "1B");
(*env)-&CallVoidMethod(env, callbackObject, callbackMethod, message);
在你的unregisterWinHook您应该删除全局引用,这样的对象可以GC'd。
(*env)-&DeleteGlobalRef(env, callbackObject);
就是这样。
我相信你可以不叫,需要一个String,并传递给它一个char*。你应该先调用NewStringUTF。
我认为这是由于您的操作系统启用了UAC函数。这是一个错误的Java 6。阅读此作进一步参考。
我说这是事件的escape关键原因是引发正确,问题只是开始只要在调用完成。
本文标题 :什么是错的这个调用Java方法?
本文地址 :CodeGo.net/464820/
Copyright (C) 2014 CodeGo.net

我要回帖

更多关于 java安装错误代码1603 的文章

 

随机推荐