简体   繁体   English

在运行时加载类

[英]Loading a class at runtime

I have some code which loads the class at runtime: 我有一些代码在运行时加载类:

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

But there seems to be issues with this and IKVM - I was wondering if there were any alternative ways to achieve the above in my Java program or if anyone knew on why that might cause issued with ikvm? 但是这和IKVM似乎存在问题 - 我想知道是否有任何其他方法可以在我的Java程序中实现上述目标,或者是否有人知道为什么可能导致ikvm发布?

Thanks 谢谢

sorry - i didnt no how to find out, its taken me ages to get this far! 对不起 - 我不知道如何找到它,它花了我很多时间来达到这个目标! This is caught in the Exception e catch statement and i am pretty sure its thrown by the line posted above 这是在Exception e catch语句中捕获的,我很确定它是由上面发布的行抛出的

classname IKVM.NativeCode.java.lang.Class Filename null Method name forName0 Line number -1 classname java.lang.Class Filename Class.java Method name forName0 Line number -2 classname java.lang.Class Filename Class.java Method name forName Line number 287 classname Test Filename Test.java Method name init Line number 50 classname Test Filename Test.java Method name isPDFAvailable Line number 24 classname cli.Analytical_Report.Form1 Filename Form1.cs Method name hasGains Line number 296 classname cli.Analytical_Report.Form1 Filename Form1.cs Method name determineAvailableData Line number 209 classname cli.Analytical_Report.Form1 Filename Form1.cs Method name consumeFile Line number 71 classname cli.Analytical_Report.Form1 Filename Form1.cs Method name btnSelectFile_Click Line number 49 classname cli.System.Windows.Forms.Control Filename null Method name OnClick Line number -1 classname cli.System.Windows.Forms.Button Filename null Method name OnClick Line number -1 classname cli.System. 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行number 287 classname测试文件名Test.java方法名称init行号50 classname测试文件名Test.java方法名称isPDFAvailable行号24 classname cli.Analytical_Report.Form1文件名Form1.cs方法名称hasGains行号296 classname cli.Analytical_Report.Form1文件名Form1 .cs方法名称determineAvailableData行号209 classname cli.Analytical_Report.Form1文件名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 classname cli.System。 Windows.Forms.Button Filename null Method name OnMouseUp Line number -1 classname cli.System.Windows.Forms.Control Filename null Method name WmMouseUp Line number -1 classname cli.System.Windows.Forms.Control Filename null Method name WndProc Line number -1 classname cli.System.Windows.Forms.ButtonBase Filename null Method name WndProc Line number -1 classname cli.System.Windows.Forms.Button Filename null Method name WndProc Line number -1 classname cli.System.Windows.Forms.Control$ControlNativeWindow Filename null Method name OnMessage Line number -1 classname cli.System.Windows.Forms.Control$ControlNativeWindow Filename null Method name WndProc Line number -1 classname cli.System.Windows.Forms.NativeWindow Filename null Method name DebuggableCallback Line number -1 classname cli.System.Windows.Forms.UnsafeNativeMethods Filename null Method name DispatchMessageW Line number -1 classname cli.System.Windows.Forms.Application$ComponentManager Filename null Method name System.Windows.Form Windows.Forms.Button文件名null方法名称OnMouseUp行号-1 classname cli.System.Windows.Forms.Control文件名null方法名称WmMouseUp行号-1 classname cli.System.Windows.Forms.Control文件名null方法名称WndProc行号-1 classname cli.System.Windows.Forms.ButtonBase Filename null方法名称WndProc行号-1 classname cli.System.Windows.Forms.Button文件名null方法名称WndProc行号-1 classname cli.System.Windows.Forms.Control $ ControlNativeWindow Filename null方法名称OnMessage行号-1 classname cli.System.Windows.Forms.Control $ ControlNativeWindow Filename null方法名称WndProc行号-1 classname cli.System.Windows.Forms.NativeWindow文件名null方法名称DebuggableCallback行号 - 1 classname cli.System.Windows.Forms.UnsafeNativeMethods Filename null方法名称DispatchMessageW行号-1 classname cli.System.Windows.Forms.Application $ ComponentManager Filename null方法名称System.Windows.Form s.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop Line number -1 classname cli.System.Windows.Forms.Application$ThreadContext Filename null Method name RunMessageLoopInner Line number -1 classname cli.System.Windows.Forms.Application$ThreadContext Filename null Method name RunMessageLoop Line number -1 classname cli.System.Windows.Forms.Application Filename null Method name Run Line number -1 classname cli.Analytical_Report.Program Filename Program.cs Method name Main Line number 18 classname cli.System.AppDomain Filename null Method name _nExecuteAssembly Line number -1 classname cli.System.AppDomain Filename null Method name ExecuteAssembly Line number -1 classname cli.Microsoft.VisualStudio.HostingProcess.HostProc Filename null Method name RunUsersAssembly Line number -1 s.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop行号-1 classname cli.System.Windows.Forms.Application $ ThreadContext Filename null方法名称RunMessageLoopInner行号-1 classname cli.System.Windows.Forms.Application $ ThreadContext Filename null方法名称RunMessageLoop Line number -1 classname cli.System.Windows.Forms.Application Filename null方法名称运行行号-1 classname cli.Analytical_Report.Program文件名Program.cs方法名称主行号18 classname cli.System.AppDomain文件名null方法名称_nExecuteAssembly行number -1 classname cli.System.AppDomain Filename null方法名称ExecuteAssembly行号-1 classname cli.Microsoft.VisualStudio.HostingProcess.HostProc文件名null方法名称RunUsersAssembly行号-1

Different database format and JDBC driver, but it will work for you with slight modification for oracle and oracle driver (full Namespaces for clarity purposes): 不同的数据库格式和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);

It's the first time I hear about ikvm, but I will try to help. 这是我第一次听说ikvm,但我会尽力帮忙。

First, another way to load the JDBC driver is with 首先,加载JDBC驱动程序的另一种方法是使用

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

Anyhow, I have read in the ikvm website that you have to convert your JARs to DLLs using the command ikvmc. 无论如何,我已经在ikvm网站上看到你必须使用命令ikvmc将你的JAR转换为DLL。 Did you already convert the Oracle driver JAR to a DLL? 您是否已将Oracle驱动程序JAR转换为DLL? And:are you sure you have make the classes in this JAR/DLL available to the program? 并且:你确定你已经使这个JAR / DLL中的类可用于该程序吗? (Whatever equivalent there is for the Java classpath) (与Java类路径无关)

Hope that helps! 希望有所帮助!

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM