|
Conversion Guidelines
- You can insert Java code in the generated code by prefacing each line of Java code inside your VB code with the following 6 characters 'java . This will make the line a comment which VB will ignore but will be executed when running in Java. Make sure you end the line with a ; as is required in Java. This only works inside a Function or Sub. For example:
'java Text1.setSelectionColor( Color.yellow );
- You can cause VB code to not show up in Java by prefacing the lines with 'vb_only. Then after the last line to be ignored add in a 'end_vb_only. This is not recommended outside of a Function or Sub. For example:
'vb_only Text1.Text = "hello" 'end_vb_only
will cause that line of code to show up as comments in the Java code. If you do not want them to appear as comments you can set the preference KeepVBOnlyAsComments=0 in the <product name>.ini file in the windows directory.
- The VB Converter add-in requires you to be at the latest service pack. For example, SP3 of Visual Basic 5.
- If you have written an ActiveX Control in VB you should include it in the project that makes reference to it.
The control will be converted to Java and all references to the control will made automatically.
- If you have a project that creates a DLL and that DLL is used in another EXE project
then you will want to create a new EXE project that contains all of the modules, classes,
UserControls, etc from all of the DLL projects and the original EXE project. Then use
the converter to convert the entire code base at one time.
- If you are using a variant and did not use one of the conversion routines when you are using a variant someplace
that another type is expected, Java cannot automatically coerce the Variant to the right type. You must call one
of the toInt, toDouble, toDate, or toString functions on the Variant to access the value.
- The static modifier on functions and property get/set functions are not supported.
- Must set user.timezone property for the Now, Date, Time, functions to have the date and time in the correct
timezone. Otherwise, it will always be returned using the GMT timezone. You can set it by:
java -Duser.timezone=MST MyApp
- With statement is not supported in all contexts. If you get an error on a line using the '.' operator then
just add the full object reference before the '.'
- The IsObject and IsNumeric will have compile time errors for variables whose type can be determined by the
programmer looking at the code. This will make for faster programs by removing this unneccessary logic.
- File IO
Only text files are supported. Open "file" For Random or Binary is not supported.
- If you are passing a control as an argument to a function be sure to specify the exact type and not just Control.
Otherwise, you will not be able to access the properties specific to that type of control. For example:
Sub Foo( text As Control )
Should be:
Sub Foo( text As TextBox )
- If you programatically move or resize controls you must use pixels instead of twips. Set the ScaleMode of the
Form to pixels.
- If you use the default ODBC-JDBC database driver, remember to setup an ODBC data source from the ODBC settings
in windows control panel.
- You need to install the Java 2 plugin in your browser in order to run your program as an applet.
- Make sure you have a "" string for the connection argument. It cannot be a variable.
- When calling Connection.Open or setting the connection string, pass the user id and password as separate arguments
instead of embedding them in connection string if they are not making it properly to the database.
- The VB command-line arg can be passed to an applet by using the param named "cmd". For application
just pass the value to the command-line when starting the Java program.
- If you specify an argument to your Sub or Function you should supply a default argument:
Sub test(Optional op As String = "+")
- With statement is only partial supported. If you get syntax errors during the conversion for lines inside a
With statement try removing the With statement and expanding all of the expressions using the "With"
expression.
- All variables used inside an error handler must be declared before the On Error statement
Dim op As String
On Error GoTo ErrHandler
...
ErrHandler:
Err = "Operation " & op & " failed."
- Put as few statements inside the 'On Error Resume Next' and 'On Error GoTo 0'. Place the error checking code
after the 'On Error GoTo 0'. This will improve the readablility of the Java code.
On Error Resume Next
x = 1 / 0
On Error GoTo 0
If Err Then ...
- Conditional returns from Gosub are not supported. You may only have one Return statement per Gosub
- If you have modified the java code generated by a previous version of AD, you will need to regenerate and redo
the changes in order to take advantage of the later version of the AD library. You can use windiff to spot all
of the changes you made.
- You can use CDbl on a Date to manipulate it as a number of days then assign it back to a Date variable
- You can use jdbc driver and jdbc url in connection string to programatically set them on db connection open
- If you want a menu item to be checked or unchecked, you must make it checked at design-time then uncheck it
on Form_Load
- Java coordinates are in pixels, so you should set scalemode on forms, frames, and pictureboxes to pixel instead
of twips to get maximum compatibility.
- VB will allow you to use a property as if it were a function i.e. rs.EOF(). If you get a syntax error during
conversion try removing the '()' in the VB code i.e. rs.EOF
- VB will allow you to use a function that doesn't require arguments as if it were a property. If you get a syntax
error during conversion try adding the '()' at the end of the function name in the VB code.
- If you have written your own collection class that has elements other than Variants then you will need to add
an extension rule to the custom.vb2java file in the <install dir>\Rules directory:
For example, if you have a collection called collectionUser that you can add instances of the class clsUser to
then you would add something like:
class clsUser
class collectionUser extends UserCollection
attribute 1based
default Item
property clsUser Item
get = $obj$.getItem( $index_var$ )
set = $obj$.Add( $val$, $index_var$ )
Conversion Rule File Notes
Troubleshooting
- When Java code is being compiled it generates an error " Package diamondedge.vb not found in import"?
This would indicate that your classpath environment variable is not correctly set. Many Java products will modify
this variable when they are installed which may cause you problems. Our install program will set it but it may
have been changed since then by installing other Java products. You can uninstall and then re-install VB Converter
or you can modify the classpath variable by hand. To modify it by hand, make sure you have "." and "<installdir>\vbc.jar"
in your classpath variable. The directory paths are separated by a ";". On NT, you set it from the System
control panel on the environment tab. From Win95 you need to set it in the autoexec.bat file. For example, if you
installed VB Converter in the default directory:
set CLASSPATH=.;c:\Program Files\VB Converter\vbc.jar
On Win95 you need to reboot and on NT you need to close VB and re-run it.
Once you have everything properly installed, all of the samples will compile without errors. If the above doesn't
help, send us an email of your environment variables by typing "set" at a DOS prompt. Also, include the
VBConverter.ini file located in your Windows directory.
- When Java code is being compiled it generates an error " Package diamondedge.swing not found in import"?
This would indicate that your classpath environment variable is not correctly set (see previous explanation).
This package is found in "<installdir>\dsuite_eval.jar". This is the optional Diamond Control Suite package.
- I get a "CreateProcess failed" error or no errors and a "Compilation failed" when trying
to convert a sample program.
The most common reason is due to the path name you specified for the Java Compiler in the VB Converter options
(Environment tab) is not correct specified. Make sure you have specified the entire path name and that the file
actually exists and that the file is actually a Java compiler (usually javac.exe).
If you press the Browse button next to the place to enter the path, you can use a windows dialog to select the
javac.exe and therefore be sure that what you have is correct.
- When I loaded my applet, it said "noninit" or "applet not initialized" in the browser's
status bar. How can I identify the cause of the problem?
The complete error message and cause will be listed in the Java Console. If you are using Java 2, the default
option, you will need to activate the Java Console by running the "Java Plugin Control Panel" from the
Start button inside the Programs folder. If you do not have this then you have not installed the Java 2 JRE or
SDK. On the Java Plugin Control Panel check the Show Java Console checkbox. The Java Console will then display
each time you run a Java 2 Applet in your browser.
If you are running as a Java 1.1 Applet then it will use the built-in Java engine and you should launch the
Java Console by clicking on the Communicator->Tools->Java Console menu item in Netscape or the View->Java
Console menu item in Internet Explorer.
If you see a class not found exception then you do not have the Java class library installed properly. See the
deployment section of the documentation.
- My database application works fine when I launch it from VB Converter's "Run Java" button but
doesn't work in IE.
Microsoft changed the name of the JBDC driver. In order to get it to work for IE you will need to change the name
of the driver in VB Converter.
- Go into VB Converter Options Dialog and switch to the Database tab.
- Press "Add Driver" and enter com.ms.jdbc.odbc.JdbcOdbcDriver then OK
- Select the dmv(sun.jdbc.odbc.JdbcOdbcDriver) Data Source then press Setup.
- Select the "com.ms.jdbc.odbc.JdbcOdbcDriver" from the combobox for the jdbc driver. Then press OK.
- Make sure you have the AWT (Java 1.1) option selected. Otherwise, you will need the Java 2 plug-in installed
for IE.
- Hit Make Java button in the VB Converter toolbar and re-launch the generated .html file in IE.
- My application works fine when I launch it from VB Converter's "Run Java" button but doesn't work
in IE or Netscape browsers.
One possible reason is that you are using the Java 2 swing controls (set in VB Converter Options dialog). You will
need to install the Java 2 plugin for your browser. VB Converter will generate the .html to use the Java
2 plugin. See the following for more information about the HTML for using the Java 2 plugin:
http://java.sun.com/products/plugin/1.2/docs/tags.html
- I get a exception relating to security or a message about "access denied" in the Java Console
when running an application in a browser.
Most likely the applet has attempted to execute native code which Java will not allow applets to do. The most common
native code is from the JDBC-ODBC driver. Since this driver uses Windows native code, the driver cannot be used
in applets because it is a Java security violation. With Java 2 you can customize your security policy to allow
this.
Another common cause is that in Java 2, the security model became more flexible in that you can specify what
you will and will not allow to happen. The default security permissions is much tighter and will not let many applets
run without changing the security permissions. You might use one of the following:
Java Security Documentation: The following are additional documents will better help to describe the
Java security model and its implications on running code in a browser.
Java Security FAQ
Java Security Guide
Java Security Home
Java Security Restrictions
- I am having trouble with the JDBC-ODBC driver.
Use a different driver. We recommend using the JDBC driver written by the manufacturer of the database you are
using. If the database you are using did not supply a JDBC driver you can use a 3rd party driver. The following
web page lists many JDBC drivers that are available:
http://developers.sun.com/product/jdbc/drivers
- VB uses "pass by reference" as a default, while Java has no such capability.
We suggest changing the data type of arguments that you would like to change the value inside the function and
use the new value in the calling function to a Variant. For example,
Sub CallingSub()
Dim intRef as Integer
test intRef
Debug.Print intRef
End Sub
Sub test(i as Integer)
i = 3
End Sub
Change to:
Sub CallingSub()
Dim intRef as Variant
test intRef
Debug.Print intRef
End Sub
Sub test(i as Variant)
i = 3
End Sub
The following would be generated:
void CallingSub()
{
Variant intRef = new Variant();
test( intRef );
System.out.println( intRef );
}
void test( Variant i )
{
i.set( 3 );
}
- I am drawing on a Form/PictureBox and the drawing is not the same in Java.
Switch the scale mode to Pixel.
- The generated form does not display in my Java IDE's screen builder or you get Java compilation errors from
the Java IDE relating to the "import diamondedge.vb.*" statement.
- When using VB Converter in non-Latin based languages such as Japanese, the text
in the report window may not be readable.
You can change the font used in the window to a different font by
changing a setting in the VBConverter.ini file. Open the VBConverter.ini file found
in your windows directory using Notepad. Add the following line underneath the line [VBConverter]:
ReportFontName=MS Gothic
|
|