在运行时加载类

时间:2011-08-03 21:18:03

标签: java ikvm

我有一些代码在运行时加载类:

Class.forName("oracle.jdbc.driver.OracleDriver");

但是这个和IKVM似乎存在问题 - 我想知道在我的Java程序中是否有任何其他方法可以实现上述目标,或者是否有人知道为什么可能导致ikvm发布?

由于

抱歉 - 我不知道如何找到它,它花了我很多时间来达到这个目标!这是在Exception e catch语句中捕获的,我很确定它是由上面发布的行引发的

  

classname IKVM.NativeCode.java.lang.Class Filename null方法名称   forName0行号-1 classname java.lang.Class文件名Class.java   方法名称forName0行号-2 classname java.lang.Class文件名   Class.java方法名称forName行号287 classname测试文件名   Test.java方法名称init行号50 classname测试文件名   Test.java方法名称为PDFAvailable行号24类名   cli.Analytical_Report.Form1 Filename Form1.cs方法名称hasGains   行号296 classname cli.Analytical_Report.Form1文件名   Form1.cs方法名称determineAvailableData行号209 classname   cli.Analytical_Report.Form1 Filename Form1.cs方法名称consumeFile   行号71 classname cli.Analytical_Report.Form1文件名Form1.cs   方法名称btnSelectFile_Click行号49 classname   cli.System.Windows.Forms.Control Filename null方法名称OnClick   行号-1 classname cli.System.Windows.Forms.Button文件名为null   方法名称OnClick行号-1类名   cli.System.Windows.Forms.Button Filename null方法名称OnMouseUp   行号-1 classname cli.System.Windows.Forms.Control文件名   null方法名称WmMouseUp行号-1 classname   cli.System.Windows.Forms.Control Filename null方法名称WndProc   行号-1 classname cli.System.Windows.Forms.ButtonBase文件名   null方法名称WndProc行号-1类名   cli.System.Windows.Forms.Button Filename null方法名称WndProc Line   数字-1类名   cli.System.Windows.Forms.Control $ ControlNativeWindow文件名为null   方法名称OnMessage行号-1类名   cli.System.Windows.Forms.Control $ ControlNativeWindow文件名为null   方法名称WndProc行号-1类名   cli.System.Windows.Forms.NativeWindow Filename null方法名称   DebuggableCallback行号-1类名   cli.System.Windows.Forms.UnsafeNativeMethods Filename null方法名称   DispatchMessageW行号-1类名   cli.System.Windows.Forms.Application $ ComponentManager Filename null   方法名称   System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop   行号-1类名   cli.System.Windows.Forms.Application $ ThreadContext Filename null   方法名称RunMessageLoopInner行号-1 classname   cli.System.Windows.Forms.Application $ ThreadContext Filename null   方法名称RunMessageLoop行号-1类名   cli.System.Windows.Forms.Application Filename null方法名称运行   行号-1 classname cli.Analytical_Report.Program文件名   Program.cs方法名称主行号18类名   cli.System.AppDomain Filename null方法名称_nExecuteAssembly行   number -1 classname cli.System.AppDomain Filename null方法名称   ExecuteAssembly行号-1类名   cli.Microsoft.VisualStudio.HostingProcess.HostProc文件名为null   方法名称RunUsersAssembly行号-1

3 个答案:

答案 0 :(得分:1)

这是我第一次听说ikvm,但我会尽力帮助。

首先,加载JDBC驱动程序的另一种方法是使用

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

无论如何,我已经在ikvm网站上看到你必须使用命令ikvmc将你的JAR转换为DLL。您是否已将Oracle驱动程序JAR转换为DLL?并且:你确定你已经使这个JAR / DLL中的类可用于该程序吗? (与Java类路径无关)

希望有所帮助!

答案 1 :(得分:1)

不同的数据库格式和JDBC驱动程序,但它会对您有所帮助,只需稍加修改oracle和oracle驱动程序(为了清晰起见,使用完整的命名空间):

java.lang.Class.forName(typeof(org.hsqldb.jdbcDriver).AssemblyQualifiedName);
java.sql.DriverManager.registerDriver(new org.hsqldb.jdbcDriver());
conn = java.sql.DriverManager.getConnection(url, username, password);

答案 2 :(得分:0)

您可以查看IKVM wiki for ClassLoader或更好地描述您的问题。