Passing arguments to java methods

i Haver been reading the java web page on this, yet am still miffed about what happening. heres the code
   class A {
        public int x;
        A(int x) {
            this.x = x;
        public String toString() {
            return Integer.toString(x);
    public class CallDemo2 {
        static void f(A arg1) {
            arg1 = null;
        public static void main(String args[]) {
            A arg1 = new A(5);
            f(arg1);
            System.out.println("arg1 = " + arg1);
    }The above code prints out 5, i think i understand that because of the local method can just be seen to be intitalling the value. The calling method in the main also something like the value gets passed back not the memory location so therefore doesnt effect the value 10.
Now the below code is what confuses me
class A {
        public int x;
        public A(int x) {
            this.x = x;
        public String toString() {
            return Integer.toString(x);
    public class CallDemo3 {
        static void f(A arg1) {
            arg1.x = 10;
        public static void main(String args[]) {
            A arg1 = new A(5);
            f(arg1);// why does 10 get printed out and not 5 ?
            System.out.println("arg1 = " + arg1);
    }

u have manged to explain how to get to each result, but am not sure
that you understad it correctly, it is different to the way i am
understanding it, thats why im posting here... i hope byt the end of
today i will understand whats going on that bit of code i posted. I
hope someone like pervel can post and explain. Pervel is a reliable
person...sorry cant be of any more help however thsi is the page i am
readingWell, THANKS A LOT. I wont bother to help you again, then. I assure you that my explanation is totally right, but if you dont trust me, well, then I wont help you again.

Similar Messages

  • Concatenating VARCHAR2 to pass to a Java method

    Hi, I've imported in Oracle 10g a Java method which processes a String. I've mapped the String to a varchar2 as follow:
    create or replace function PARSE(input in varchar2) RETURN varchar2
    as language java
    name 'Base64.decodeToString(java.lang.String) return String';
    I then built a simple PL/SQL program to build the string to pass to the Java method as follows:
    create or replace procedure TEST_PARSE(input_tid in number) is
    begin
    declare
    result varchar2(32767);
    cursor object_cur is select TEXT from OBJECTSTORE where TID=input_tid order by rnumber;
    object_row object_cur%ROWTYPE;
    begin
    open object_cur;
    loop
    fetch object_cur into object_row;
    exit when object_cur%NOTFOUND;
    result := result || object_cur.TEXT;
    end loop;
    close object_cur;
    result := PARSE(result);
    end
    The PL/SQL program just concatenates the TEXT column from a bunch of records in the table OBJECTSTORE. The TEXT column is defined as a VARCHAR2(4000).
    Now if the SELECT in the TEST_PARSE program returns only 1 record, then everything works and the PARSE Java function returns the processed String.
    If the SELECT returns 2 or more records then I get the following warning and the Java method doesn't return anything:
    "Warning: PL/SQL procedure successfully completed with compilation errors"
    Since I know that the Java method works fine (it has been tested within java programs successfully ) I think the problem is something to do with data types or maybe with the size of the concatenated string.
    Any help really appreciated. Thank you!

    Thanks guys, it still doesn't work, but at least now I can see some error messages:
    Error code -24345: ORA-24345: A Truncation or null fetch error occurred
    1) The error occurs when I call the Java method. As before this happens only when the select returns more than 1 record and I concatenate two or more TEXT (each one is a VARCHAR2(4000)). However the concatenation works fine so I guess the problem is that the resulting string is too big for the Java method to process.
    Or maybe the string returned by the Java method is too big for the PL/SQL varchar2?
    2) Also why do I get a compilation error if I try to add the size of the varchar2 in the mapping below?
    create or replace function PARSE(input in varchar2) RETURN varchar2
    as language java
    name 'Base64.decodeToString(java.lang.String) return String';

  • Trying to pass arguments into a method call and failing

    Hi everyone, I'm fairly new to programming, and newer to Java. I'm currently working on a project that pulls fields from a database based on a name, and I'm having some trouble getting the connection string set up.
    Statically defined, the database connects and the program logic that follows works just fine. The problem is that to future-proof this application, I need to pass the database URL, port, db instance, username, and password into the program as arguments from the batch file that will then be scheduled to run the program on a job-by-job basis.
    Product Version: NetBeans IDE 6.1 (Build 200805300101)
    Java: 1.6.0_06; Java HotSpot(TM) Client VM 10.0-b22
    System: Windows XP version 5.1 running on x86; Cp1252; en_US (nb)
    Userdir: C:\Documents and Settings\xxxxxxxxxxx.SPROPANE\.netbeans\6.1
    Here's my current working source (with the network addresses obfuscated):
    package processsqrjob;
    import java.io.*;
    import java.sql.*;
    import java.util.Date;
    public class Main {
         * @param args jobname, jobparameters, HYPusername, HYPpassword, HYPservername, HYPport, oracleDBURL, oracleport (default 1512), SID (dbb?), oracleusername, oraclepass
         * @throws exeption
        // jobname [0], jobparams[1], hypusername [2], hyppassword [3], hypservername [4], hypport[5], oracledburl[6], oracleport[7], sid[8], oracleusername[9], oraclepass[10]
        public static void main(String[] args) throws SQLException
            DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@oracleserver.local.intranet.com:1521:dbname", "username", "pass");
            Statement stmt = con.createStatement();
            Date date = new Date(); //get the system date for output to both the error log and the DB's lastrun field
            System.out.println(date); //print the date out to the console
            System.out.println(args[0]); //print the job name to the console
            String sourcefolder=""; //we're going to load the job source folder into this variable based on the job's name
            String destfolder="";//same with this variable, except it's going to get the destination folder
            try {
                ResultSet rs = stmt.executeQuery("SELECT * FROM myschema.jobs WHERE NAME =\'"+args[0]+"\'");
                while ( rs.next() ) {
                    sourcefolder = rs.getString("sourcefolder");
                    destfolder = rs.getString("destfolder");
                stmt.executeQuery("UPDATE myschema.jobs SET lastrun ='"+date+"' WHERE name ='"+args[0]+"'");//put this after hyp code
    //            System.out.println(sourcefolder);
    //            System.out.println(destfolder);
    //            System.out.println(description);
                stmt.close(); //close up the socket to prevent leaks
            }catch(SQLException ex){
                System.err.println("SQLException: " + ex.getMessage());
                logError(args[0], ex.getMessage());
    }That works, and it connects to the database and everything. But when I pass the variables in from the project properties run settings, I get the following exception:
    Exception in thread "main" java.sql.SQLException: invalid arguments in call
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
            at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:235)
            at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:440)
            at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:164)
            at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:34)
            at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:752)
            at java.sql.DriverManager.getConnection(DriverManager.java:582)
            at java.sql.DriverManager.getConnection(DriverManager.java:207)
            at processsqrjob.Main.main(Main.java:42)
    Java Result: 1That is with Connection con = DriverManager.getConnection("jdbc:oracle:thin:@oracleserver.local.intranet.com:1521:dbname", "username", "pass"); changed to Connection con = DriverManager.getConnection("jdbc:oracle:thin:@"+args[6]+":"+args[7]+":"+args[8]+"\", \""+args[9]+"\", \""+args[10]+"\"");{code}, with args 6 7 8 and 9 set to url, port, dbinstance, username, and password respectively.
    Perhaps it's the way I'm escaping the quotation marks, but I put that same line inside a System.out.println() and it output it exactly as I had typed it in statically before, so I don't know what it could be.
    I would really appreciate any advice. Thanks in advance for your time.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    I think you're mixing up SQL and Java. The Java method expects the user name and password as separate parameters, not encoded in one String. So you shouldn't be concatenating args[9] and args[10] at all, they should remain as separate parameters.
    The call should be:DriverManager.getConnection("jdbc:oracle:thin:@" + args[6] + ":"+ args[7] + ":" + args[8], args[9], args[10]);
                                                     parameter 1                                  2         3

  • Passing arguments to a method

    I need to pass an ip address into a method. So I know its type InetAddress. If the IPAddress is 10.100.50.33. how would I pass it in to the method. eg:
    SysNameScanCommand(  )Would it be like this?
    SysNameScanCommand(InetAddress 10.100.50.33 )

    It depends what kind of argument your function is expecting. If it wants a String, you could call
    SysNameScanCommand("10.100.50.33");If it wants an InternetAddress object, then the call would be something like:
    SysNameScanCommand(new InternetAddress("10.100.50.33"));

  • Passing arguments to main method from a shell script

    The main method of my class accept more than 10 arguments so my shell script execute this class like this :
    java -cp xxxx mypackage.MyClass $*
    The problem is that some of those arguments allows spaces. When i execute this script like this :
    myscript.sh firstparam secondparam ...... tenthparm "eleventh param"
    or
    myscript.sh firstparam secondparam ...... tenthparm 'eleventh param'
    the java class consider that my eleventh param is 'eleven' and not 'eleventh param'
    The same class works well with an equivalent dos script.

    I had this problem once also, and I found there are several ways to fix it. One way is to replace all of the spaces in the arguments with _ characters, or you can concantate all of the arguments into one String at runtime (with spaces in between) and use code to separate the arguments out. With the quotation marks, this code would be simple. If the spaces in one argument are used to divide different parts of the argument, just make them spearate arguments.

  • Pass literal to Java Stored Procedure?

    The standard Java SP call spec is of the form: (assume a PLSQL package spec properly declares publicProc)
    CREATE OR REPLACE PACKAGE BODY JavaSP AS
    PROCEDURE publicProc(param1 IN VARCHAR2) AS LANGUAGE JAVA NAME 'package1.Class1.method1(java.lang.String)';
    END;
    If I want to pass a value to the Java SP vs passing a parameter that's passed to me by the caller (say I want to invoke the Java method with the string "TEST" passed as a literal value from the package, but don't want the PLSQL caller to know/care what I'm passing to the Java method), is there a way that I can do something like the following? (ie, where I pass the literal value "TEST" as a param to the Java method instead of passing a param that is passed via PLSQL by the caller...)
    CREATE OR REPLACE PACKAGE BODY JavaSP AS
    privateVar VARCHAR2(20) := "TEST";
    PROCEDURE publicProc(param1 IN VARCHAR2) AS LANGUAGE JAVA NAME 'package1.Class1.method1(privateVar)';
    END;
    Clearly, this is an illegal/improper call spec and won't compile, but it hopefully illustrates what I'm trying to accomplish.
    My work-around to this has always been the following:
    CREATE OR REPLACE PACKAGE BODY JavaSP AS
    privateVar VARCHAR2(20) := 'TEST';
    PROCEDURE privateProc(param1 IN VARCHAR2) AS LANGUAGE JAVA NAME 'package1.Class1.method1(privateVar)';
    PROCEDURE publicProc AS
    BEGIN
    privateProc(privateVar);
    END;
    END;
    But it'd be interesting/nice to be able to pass the value directly vs "double-wrapping" the Java SP.
    Any thoughts??
    Thanks,
    Jim

    Oracle provides several ways of passing objects to and from java to Oracle Stored Procedure.
    One way is to directly create oracle.sql.STRUCT object and pass array of values to this object. Another way is to implement java.sql.SQLData or oracle.sql.ORAData interfaces in your class and pass this class to setObject function.
    It is all well described in manual in chapter "Working with Oracle Object Types", there is also a lot of examples in this chapter and on the web.
    http://download-uk.oracle.com/docs/cd/B19306_01/java.102/b14355/oraoot.htm - Working with Oracle Object Types
    Some of the examples:
    http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/ObjectOracleSample/Readme.html
    http://javaalmanac.com/egs/java.sql/InsertObjectOraclePreparedStatement.html

  • Call Java Method from Callback function

    I am writing a JNI wrapper in c++ for a particular event driven DLL. The DLL makes a network connection to another device and then calls a callback function when events are raised on the device. The DLL has 3 basic functions: connect, disconnect, and registerEventListener. RegisterEventListener takes a function pointer which is called each time an event is raised on the device.
    My wrapper DLL exposes connect and disconnect functions via JNI. I can call these functions just fine from my Java code. Now the question... How do I call a Java method from my c++ callback function? I can call a Java method using env->CallXXXMethod(...) from within a function that is accessible to Java but I don't have access to the JNI parameters in my Callback function.
    So how do I call a Java method from a callback function? If this cannot be done then what is the "right way" to handle native event notification with JNI?

    jschell wrote:
    JNI parameters? Meaning what exactly?
    General outline of a callback
    1. Entry
    2. Get the VM, env - there are methods for this
    3. Attach the thread
    4. Get a java object - how depends on what you are doing, but create it or a static reference.
    5. Get the java method
    6. Call the java method.That is exactly correct. The callback function is called from a separate thread so using a cached pointer to JNIEnv, obtained from the original native method, crashes the JVM. The jmethodID and jclass objects (which are needed to call the static Java method) can be cached without problem. The following is the code I used to attach the current thread and call my static method.
    void MyClass::onEvent(int system_id, char* data)
         //get a pointer to the Java Environment
         JNIEnv *env;
         jvm->AttachCurrentThread((void **)&env, NULL);
         //Call the Java method with the newly aquired data
         jstring js = env->NewStringUTF(data);
         env->CallStaticVoidMethod(cls, mid, system_id, js);
    }My last question is about cleanup in this function. When I use NewStringUTF to "convert" my char* to jstring do I need to do anything special to clean up or will the Java garbage collector take care of it since the jstring is being passed to a Java method?
    Thanks for you help

  • How to pass a file into a java method

    I am trying to pass a file into a java method so I can read the file from inside the method. How can I do this? I am confident passing int, char, arrays etc into methods as I know how to identify them in a methods signature but I have no idea how to decalre a file in a mthods signature. Any ideas please ?
    Thanks

    Hi,
    Just go thru the URL,
    http://www6.software.ibm.com/devtools/news1001/art24.htm#toc2
    I hope you will get a fair understanding of 'what is pass by reference/value'.
    You can pass Object reference as an argument.
    What Pablo Lucien had written is right. But the ideal situation is if you are not modifying the
    file in the calling method, then you can pass the String (file name) as an argument to the called method.
    Sudha

  • How to pass argument to the Java Plugin JVM w/o using the Control Panel?

    I want to deploy an applet to be loaded by the Java Plug In
    and fix some settings of its Java Virtual Machine.
    The JPI Control Panel offers two ways to pass arguments to the JVM,
    none satisfactory.
    1. while interactive via the Control Panel Window.
    This cannot be a solution for a deployed applet.
    or
    2. by editing the system generated file that stores
    the settings of the Plugin Control Panel, using a property
    named javaplugin.jre.params.
    The problem with this method is that if forces to access
    and edit this property file which is stored at various locations
    depending the client platform. Then, it may collide with other
    settings for other applets.
    Is there a way to pass the arguments to the JVM
    from within the html file?
    Has anyone found a solution to this question?
    JPS

    I am interested in this issue as well.
    Did anyone find a reliable way to specify the runtime parameters that should be used by the Java Plug-in in order to execute a given Java applet?
    I believe a good place to specify these runtime parameters would be the applet's JAR manifest: only digitally signed applets should be able to set the desired runtime parameters...
    Any comments / suggestion would be greatly appreciated.
    Regards,
    Marco.

  • Passing variables frm xsl to a java method

    here is my current frustration -- aside from being new to java and xsl...
    i have an xml message (that is passed to me from another process) as follows:
    <?xml version="1.0" encoding="UTF-8"?>
    <WillsXMLStart>
        <inputEventStart>TRUE</inputEventStart>
        <inputEventNumber>1</inputEventNumber>
        <inputEventID>HEREISTHEID</inputEventID>
        <inputEventEnd>TRUE</inputEventEnd>
    </WillsXMLStart>ok now i am using netbeans to create and xsl to gram the information and reformat the information because the end process want the data and event tags differantly. my xsl is as follows:
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:gng="java:GetAndConvert"
                    exclude-result-prefixes="gng"
                    version="2.0">
        <xsl:output     encoding="UTF-8" indent="yes" method="xml"/>
        <xsl:template match="/">
            <WillsXMLStart>
                <inputEventStart>
                    <xsl:value-of select="WillsXMLStart/inputEventStart"/>
                </inputEventStart>
                <inputEventNumber>
                    <xsl:value-of select="WillsXMLStart/inputEventNumber"/>
                </inputEventNumber>
                <inputEventID>
                    <xsl:variable name="inputVariable">
                        <xsl:value-of select="WillsXMLStart/inputEventID"/>
                    </xsl:variable>
                    <!-- <xsl:value-of select="$inputVariable"/> -->
                    <xsl:value-of select="gng:getString('$inputVariable')"/>
                </inputEventID>
                <inputEventEnd>
                    <xsl:value-of select="WillsXMLStart/inputEventEnd"/>
                </inputEventEnd>
            </WillsXMLStart>
        </xsl:template>
    </xsl:stylesheet>ok... now for the frustrating part... what i need to do is (as the code shows(i think)), get and store in a variable called "inputVariable" the specific informati that is stored in the "inputEventID" from the xml. that works fine... but i need to pass that information as a string to the java method "getString(String inputVariable)".... my java code (just a test) is as follows:
    * GetAndConvert.java
    *  @author william
    * Created on June 27, 2007, 8:04 AM
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    public class GetAndConvert {
        /** Creates a new instance of GetAndConvert */
        public String getString(String inputVariable) {
            String x = "test";
            System.out.print("this is the string that is hardcoded into GAC: " + inputVariable);
            return x;
    }OK.... i am getting the following error when i try to run the whole thing -- translation from within XSL:
    XML validation started.
    Checking file:/home/william/PROGRAMMING/TestingJavaXML/src/testingXML-JavaInput.xsl...
    Cannot find class 'java:GetAndConvert'.
    Cannot find external method 'java:GetAndConvert.getString' (must be public).
    Could not compile stylesheeti have 2 packages in my "project". 1 = default where i have my xml and xsl files... 2 = JavaEvents where i have my .Java file.
    any and all help would really be appreciated... as i am going bald trying to figure this out. you can either post here or you can email me at: [email protected]
    thanks in advance for all your help.
    Deathsbain.

    OK... now i am getting this error...:
    XSL
    <!--
        Document   : translatorJavaXSL.xsl
        Created on : June 27, 2007, 3:53 PM
        Author     : william
        Description:
            Purpose of transformation follows.
    -->
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:gng="java:JavaSRC.xmljavamain"
                    exclude-result-prefixes="gng"
                    version="1.0">
        <xslutput encoding="UTF-8" indent="yes" method="xml"/>
        <xsl:template match="/">
            <WillsInputXML>
                <eventStart>
                    <xsl:value-of select="WillsInputXML/eventStart"/>
                </eventStart>
                <eventNumber>
                    <xsl:value-of select="WillsInputXML/eventNumber"/>
                </eventNumber>
                <eventUniqueID>
                    <xsl:variable name="inputVariable">
                        <xsl:value-of select="WillsInputXML/eventUniqueID"/>
                    </xsl:variable>
                    <xsl:value-of select="$inputVariable"/>
                    <xsl:variable name="myInstance">
                        <xsl:value-of select="gng:new()"/>
                    </xsl:variable>
                    <xsl:value-of select="gng:xmlJavaConverter($myInstance, $inputVariable)"/>
                </eventUniqueID>
                <eventEnd>
                    <xsl:value-of select="WillsInputXML/eventEnd"/>
                </eventEnd>
            </WillsInputXML>
        </xsl:template>
    </xsl:stylesheet>
    JAVA
    * xmljavamain.java
    * Created on July 2, 2007, 8:58 AM
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    package javaSRC;
    * @author william
    public class xmljavamain
        /** Creates a new instance of xmljavamain */
        public String xmlJavaConverter (String inputValue)
            return ("this is the xmljavamain function...");
    }when running the "NetBeans" translator for the XSL page i get this error.
    XML validation started.
    Checking file:/home/william/PROGRAMMING/XML-Java-XSL/src/xmljavaxsl/translatorJavaXSL.xsl...
    Cannot find class 'java:JavaSRC.xmljavamain'.
    Cannot find external constructor 'java:JavaSRC.xmljavamain'.
    The first argument to the non-static Java function 'xmlJavaConverter' is not a valid object reference.
    Could not compile stylesheet
    Could not compile stylesheet
    XML validation finished.WHAT AM I DOING WRONG?
    Deathsbain.

  • Java method call from c passing string more info

    I am trying to call a java method from c passing a String as an argument.
    my C code is as follows.
    //Initalise jstring and class (to recieve String)
    jstring textp;
    jclass texts = (*env)->GetObjectClass(env, obj);
    jmethodID text = (*env)->GetMethodID(env, texts, "texture", "([Ljava/lang/String;)V");
    //Create a new jstring from the char* texturePath (in textures)
    //call the java method with the jstring
    textp = (*env)->NewStringUTF(env,ret.textures->texturePath);
    (*env)->CallVoidMethod(env, obj, text,textp);
    //java code
    // texture which recieves a string
    public void texture(String texturePath){
    The error I get is as follows:
    SIGSEGV 11 segmentation violation
    si_signo [11]: SEGV
    si_errno [0]:
    si_code [1]: SEGV_MAPERR [addr: 0xc]
    stackpointer=FFBED790
    "Screen Updater" (TID:0x4f9060, sys_thread_t:0x4f8f98, state:CW, thread_t: t@11, threadID:0xf2d31d78, stack_bottom:0xf2d32000, stack_size:0x20000) prio=4
    [1] java.lang.Object.wait(Object.java:424)
    [2] sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:78)
    [3] sun.awt.ScreenUpdater.run(ScreenUpdater.java:98)
    "AWT-Motif" (TID:0x40be50, sys_thread_t:0x40bd88, state:R, thread_t: t@10, threadID:0xf2d71d78, stack_bottom:0xf2d72000, stack_size:0x20000) prio=5
    [1] sun.awt.motif.MToolkit.run(Native Method)
    [2] java.lang.Thread.run(Thread.java:479)
    "SunToolkit.PostEventQueue-0" (TID:0x431950, sys_thread_t:0x431888, state:CW, thread_t: t@9, threadID:0xf2e71d78, stack_bottom:0xf2e72000, stack_size:0x20000) prio=5
    [1] java.lang.Object.wait(Object.java:424)
    [2] sun.awt.PostEventQueue.run(SunToolkit.java:407)
    "AWT-EventQueue-0" (TID:0x430ea8, sys_thread_t:0x430de0, state:CW, thread_t: t@8, threadID:0xf3071d78, stack_bottom:0xf3072000, stack_size:0x20000) prio=6
    [1] java.lang.Object.wait(Object.java:424)
    [2] java.awt.EventQueue.getNextEvent(EventQueue.java:212)
    [3] java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:100)
    [4] java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:91)
    [5] java.awt.EventDispatchThread.run(EventDispatchThread.java:83)
    Exiting Thread (sys_thread_t:0xff343db0) : no stack
    "Finalizer" (TID:0x154e98, sys_thread_t:0x154dd0, state:CW, thread_t: t@6, threadID:0xfe391d78, stack_bottom:0xfe392000, stack_size:0x20000) prio=8
    [1] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:146)
    [2] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:168)
    [3] java.lang.ref.Finalizer$FinalizerWorker$FinalizerThread.run(Finalizer.java:124)
    "Reference Handler" (TID:0x1506a0, sys_thread_t:0x1505d8, state:CW, thread_t: t@5, threadID:0xfe3c1d78, stack_bottom:0xfe3c2000, stack_size:0x20000) prio=10
    [1] java.lang.Object.wait(Object.java:424)
    [2] java.lang.ref.Reference$ReferenceHandler.run(Reference.java:130)
    "Signal dispatcher" (TID:0x13d180, sys_thread_t:0x13d0b8, state:MW, thread_t: t@4, threadID:0xfe3f1d78, stack_bottom:0xfe3f2000, stack_size:0x20000) prio=10
    "main" (TID:0x38918, sys_thread_t:0x38850, state:R, thread_t: t@1, threadID:0x25228, stack_bottom:0xffbf0000, stack_size:0x800000) prio=5 *current thread*
    [1] loader.Callbacks.nativeMethod(Native Method)
    [2] loader.Callbacks.main(Callbacks.java:184)
    [3] graphics.GR_MakeTrack.init(GR_MakeTrack.java:60)
    [4] graphics.GR_MakeTrack.main2(GR_MakeTrack.java:49)
    [5] graphics.GR_MakeTrack.main(GR_MakeTrack.java:41)
    [6] control.GE_main.GE_main1(GE_main.java:87)
    [7] control.GE_main.main(GE_main.java:66)
    gmake: *** [run] Abort (core dumped)

    I am trying to call a java method from c passing a
    String as an argument.
    my C code is as follows.
    //Initalise jstring and class (to recieve String)
    jstring textp;
    jclass texts = (*env)->GetObjectClass(env, obj);
    jmethodID text = (*env)->GetMethodID(env, texts,
    "texture", "([Ljava/lang/String;)V");
    Hi Pete,
    your problem is that the method texture you are trying to find does not exist. If you look carefully at your declaration of the method signature in the GetMethodID call you will see "([Ljava/lang/String;)V" which is trying to find a method that accepts a String array as its parameter. Remove the [ from the method signature and it should work ok. You might want to test text (jmethodID) for NULL or 0 before trying to call it as well.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Multidimensional array as argument to a Java method

    Hello all,
    I have defined in C the following array :
    char my_array[100][3];I want to pass this mutidimensional array to a Java method. How should I write my C array as an argument of the Java method ?
    TIA

    You cannot do that in a straight-forward fassion. The C compiler reserves 300 consecutive bytes in memory, the base address of which is accessible through my_array. The base address of each of your 100 rows can be accessed as my_array[row]. The length of each row is fixed and only known to the programmer and the compiler which uses it to calculate the row offsets.
    Java has a slightly different approach to multi-dimensional arrays. Actually they are simply not implemented. What you see and use as multi-dimensional array is a composition of one array holding the references to other arrays - remember, arrays are also only Objects. This implies that the data of different rows does not at all represent a contingious memory region.
    So what you need to do is to allocate an array of size 100, which holds char[]s - references to char-arrays. Then you iterate through your C array and for each row you allocate an char-array of length 3 initialized to the appropriate row. The references to those char-arrays need to be stored in the char[]-array.
    Use env->NewCharArray(env, length) to create a new char[] and env->NewObjectArray(env, length, clazz, null) to create the char[][]. Accesing the elements of these arrays is described in:
    http://java.sun.com/docs/books/tutorial/native1.1/implementing/array.html

  • Passing Parameters via Post Method from Webdynpro Java to a web application

    Hello Experts,
    I want to pass few parameters from a web dynpro application to an external web application.
    In order to achieve this, I am referring to the below thread:
    HTTP Post
    As mentioned in the thread, I am trying to create an additional Suspend Plug parameter (besides 'Url' of type String) with name 'postParams' and of type Map.
    But when I build my DC, I am getting the same error which most of the people in the thread have mentioned:
    Controller XXXCompInterfaceView [Suspend]: Outbound plug (of type 'Suspend') 'Suspend' may have at most two parameters: 'Url' of type 'string' and 'postParams' of type 'Map'.
    I am using SAP NetWeaver Developer Studio Version: 7.01.00
    Kindly suggest if this is the NWDS version issue or is it something else that I am missing out.
    Also, if it is the NWDS version issue please let me know the NWDS version that I can use to avoid this error.
    Any other suggestion/alternative approach to pass the parameters via POST method from webdynpro java to an external web application apart from the one which is mentioned in the above thread is most welcome.
    Thanks & Regards,
    Anurag

    Hi,
    This is purely a java approach, even you can try this for your requirement.
    There are two types of http calls synchronous call or Asynchronous call. So you have to choose the way to pass parameters in post method based on the http call.
    if it is synchronous means, collect all the values from users/parameters using UI element eg: form and pass all the values via form to the next page is nothing but your web application url.
    If it is Asynchronous  means, write a http client in java and integrate the same with your custom code and you can find an option for sending parameters in post method.
    here you go and find the way to implement Asynchronous  scenario,
    http://www.theserverside.com/news/1365153/HttpClient-and-FileUpload
    http://download.oracle.com/javase/tutorial/networking/urls/readingWriting.html
    http://digiassn.blogspot.com/2008/10/java-simple-httpurlconnection-example.html
    Thanks & Regards
    Rajesh A

  • How to call a java method so I can pass a file into the method

    I want to pass a file into a java method method from the main method. Can anyone give me some help as to how I pass the file into the method - do I pass the file name ? are there any special points I need to put in the methods signature etc ?
    FileReader file = new FileReader("Scores");
    BufferedReader infile = new BufferedReader(file);
    Where am I supposed to put the above text - in the main method or the one I want to pass the file into to?
    Thanks

    It's a matter of personal preference really. I would encapsulate all of the file-parsing logic in a separate class that implements an interface so that if in the future you want to start taking the integers from another source, e.g. a db, you wouldn't need to drastically alter your main application code. Probably something like this, (with an assumption that the numbers are delimited by a comma and a realisation that my file-handling routine sucks):
    public class MyApp{
    public static void main(String[] args){
    IntegerGather g = new FileIntegerGatherer();
    Integer[] result = g.getIntegers(args[0]);
    public interface IntegerGatherer{
    public Integer[] getIntegers(String location);
    import java.io.*;
    public class FileIntegerGatherer implements IntegerGatherer{
    public Integer[] getIntegers(String location){
    FileInputStream fs=null;
    try{
    File f = new File(location);
    fs = new FileInputStream(f);
    byte[] in = new byte[1024];
    StringBuffer sb = new StringBuffer();
    while((fs.read(in))!=-1){
    sb.append(new String(in));
    StringTokenizer st = new StringTokenizer(sb.toString(),",");
    Integer[] result = new Integer[st.countTokens()];
    int count = 0;
    while(st.hasMoreTokens()){
    result[count]=Integer.valueOf(st.nextToken());
    count++;
    catch(IOException e){
    //something sensible here
    finally{
    if(fs!=null){
    try{
    fs.close();
    catch(IOException f){
    return result;
    Once compiled you could invoke it as java MyApp c:\myInts.txt
    Sorry if there are typos in there, I don't have an ide open ;->

  • How to pass a JavaScript variable into a java method

    I would like to know how to pass a JavaScript variable into a java method with in a <% %> tag inside a JSP file like so:
    <%@ page contentType="text/html;charset=windows-1252"%>
    <html>
    <head>
    <script LANGUAGE="JavaScript">
    myValue = someDynamicValue;
    <% System.out.println(myValue)%>
    </script>
    </head>
    <body>
    </body>
    </html>
    obviously "System.out.println(myValue)" will not work because myValue is seen as a java variable and not a JavaScript variable.
    I would like to know how to let the jsp file, that I wrote in the above code, see myValue as a JavaScript variable and not a java variable so that I can pass it to a java method.
    NOTE: the java method does not have to be a println() method, it can be any method of my choice.
    NOTE: someDynamicValue is a JavaScript value that can dynamically change

    I don't believe you can. JSPs are really just elaborate templates that an engine such as Tomcat parses and generates an HTML page based on. That page is then displayed to the user. By the time you want to use some function in Javascript, the JSP has already been parsed and generated.
    Basically, Javascript and JSPs can't talk to each other. One's server-side and the other is client-side.

Maybe you are looking for