Inheritance in JNI

I'm trying to take an API that's written in Java and calling it from C++ using JNI.
My question deals with inherited types. For instance, in Java, we can do the following:
List list = new List();
String in = "me";
list.add(string);
String out = (String) list.get(0);
out.toString(out.substring(1));
When I get the string out of list, the type is Object, which I cast to String, and then I can do whatever I want just like it was a String (since that's what I put in).
So in my C++ code, a List such as the one above is given to me as the return value of a Java method. In other words, I didn't add anything to the List, it just comes back as a jobject that already has some other objects in it. Then I run the equivalent of list.get(0) using CallObjectMethod, which returns another jobject, of which I know the type. However when I try to run a method on that element of the list, I get a Java coredump and a seg fault.
I think what's happening is that the "type" of the jobject that gets returned from list.get(0) is java.lang.Object and when I try to run any object specific method, like String.substring(), JNI doesn't recognize the jobject as one of type String so it dies on me. Does anyone know how to "cast" a jobject? Or am I just completely off in my assessment of what is causing the problem?

Hi,
i face a problem in casting jobject in JNI. From Java layer i receive an array of super class objects. but in JNI layer i need to access the methods of subclass, for that i need to cast to subclass. in JNI there are methods like IsInstanceOf and IsAssignableFrom which can justify the validity of a casting, but there are no methods to cast as such. can some one help me sort it out.
Thanks in advance.

Similar Messages

  • Defining inherited classes in JNI

    I have to use JNI in order to inherit a concrete class from an abstract one (java.util.TimerTask) and, then, instantiate it.
    I have to re-define the abstract method "run" of "TimerTask". In Java it's a trivial problem but I have to do it in C++!
    I hope I explained my problem. How do I work this?

    Well, it's not entirely clear. My assumption is that you want to derive a concrete class from an abstract class, and you want the concrete class to implemenet "run()").
    1. Define your concrete class (in java). Give it a run method, but deine the run method as native.
    2. Run jnih and generate a .h file (C header file) for the native method.
    3. Write a library (dll on Windows) that implements the subroutine as declared in the .h file.

  • JNI bug?

    Hi,
    I hope this is an OK place to report bugs. The opening message on the forum
    points to the website for bug reporting, but that's only about support and
    I'm not looking for support, I just want to report a bug (I think).
    Anyway. I'm playing with JRocket 7 over Win2K sp3. The version string is:
    $ ./java -version
    java version "1.4.0"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0)
    BEA Weblogic JRockit(R) Virtual Machine (build
    7.0-1.4.0-win32-GARAK-20020830-1714, Native Threads, Generational Concurrent
    Garbage Collector)
    I'm using JNI and though most things seem to work OK with JRocket, I've
    found that using JNI to call java.lang.Class.getDeclaredMethods() on any
    class object will trigger a Null pointer exception. The attached program
    demonstrates this. If you compile it up, and then call it with the full
    path to the JVM.DLL then it tries to print the results of listing all the
    methods of java.lang.Class. With Sun's J2SDK 1.4.1 (and before), and IBM's
    1.2-style JDK, it works fine. Using JRocket it throws a
    NullPointerException. I'm using all default options for JRocket.
    I'm using the CallObjectMethodA() function with a NULL argument array to
    invoke the method ('cos that's what my real code does), but providing a real
    non-NULL array, or using the varags form, CallObjectMethod(), makes no
    difference.
    BTW, I'm finding a few other places where JR's JNI is inconsistent with
    Sun's (not necessarily bugs, though I think some are). Should I post them
    here ? Or email someone ? Or just keep 'em to myself ;-)
    -- chris
    [JNITest.zip]

    Staffan,
    I had a look at this and can confirm
    that this is indeed a problem in JRockit. Unfortunately there is no easy
    workaround other than calling Class.getDeclaredMethods() from a Javamethod
    instead of directly from JNI. Can you explain a bit more about your
    application and what you want to achieve?Thank for confirming the bug (which, incidentally also affects the other
    get[Declared]{Field/Method/Constructor/Class}[s] methods -- with the
    exception of getInterfaces(), for some reason).
    What I'm doing is using JNI to drive the JVM from Smalltalk. I'm using
    reflection to generate (on-the-fly) wrapper (Smalltalk) classes
    corresponding to Java classes and whose instances internally use JNI to
    invoke the Java methods, etc. So it's rather important that reflection
    actually works ;-)
    There's no great difficulty in setting up a forwarding Java class that
    invokes the reflection methods of java.lang.Class, and the forwarding
    class's methods can be invoked from JNI without problems, so I've been able
    to put together a patch that allows my stuff to work over JRockit.
    You asked about the other inconsistencies I've found. There are only 3 (now
    I've had a chance to analyse what I was seeing a bit better -- not to
    mention getting rid of a couple of bugs of my own...). None is especially
    important, and they are kind of esoteric too, but FWIW:
    The JNI DefineClass() method: Sun's implementation will accept NULL values
    for either or both of the name and the class loader. JRockit seems to get
    an access violation (this is on Windows) if given a NULL name, and
    apparently calls exit() if it is given a NULL class loader. I think that
    the Sun behaviour is better since both the name and the classloader are
    optional using the Java interfaces.
    Given a couple of Java classes:
    class Base
    Base(int i) {}
    Base(boolean b) {}
    class Derived
    extends Base
    Derived(int i) {}
    Attempting to use one of Base's constructors as if they were "inherited" by
    Derived acts differently on Sun and JRockit. Code like (I'm typing this off
    the top of my head):
    jclass derived = jnvEnv->findClass("Derived");
    jmethod mid = jniEnv->GetMethodID(derived, "<init>", "(Z)V");
    jvalue args[1];
    args[1].z = true;
    jobject new = jniEnv->CallConstructorA(derived, mid, args);
    will fail on Sun's VM since the call to GetMethodID() will fail with a
    NoSuchMethodError (correctly, I think) whereas JRockit will return a handle
    on the constructor with the same signature in the superclass. When that
    "inherited" constructor is then used the created object is of class Base,
    even though the constructor was invoked on Derived.
    Given the following:
    class Base { public static int ambiguous = 100; }
    interface Interface { int ambiguous = -100; }
    class Derived extends Base implements Interface { }
    Any reference to Derived.ambiguous from Java will trigger a compile-time
    error. However it is legal to do the equivalent from JVM bytecodes (a
    getstatic with class="Derived" name="ambiguous" type="I") and is defined (as
    I read the spec) to be -100. I.e. the JVM resolves the field reference to
    the interface. Under both the Sun and JRockit JVMs that works as expected.
    Doing the equivalent from JNI:
    jclass derived = jniEnv->findClass("Derived");
    jfield fid = jniEnv->GetFieldID(derived, "ambiguous", "I");
    jint value = jniEnv->GetStaticIntField(derived, fid);
    returns -100 on Sun's JVM (which is what I'd expect), but returns 100 on
    JRockit (which I think is wrong).
    Like I said, esoteric...
    Hope this helps.
    -- chris

  • Error calling JNI method

    Hello Everyone,
    I´m trying to call a method wich is inside a DDL by JNI. This works fine in a Java console application. However, this call doesn´t work when i put this operation in a web apllication and deploy in a weblogic server. I´ve already put the dll path in the PATH variable but it didn´t work. When I debug the application, the DLL can be loaded but i call the native method a error happens and a get the following message:
    java.lang.UnsatisfiedLinkError: criptografa
         at com.tim.util.cripto.ACC_Cripto.criptografa(Native Method)
    Why does it work when I use a java console application ?
    Thanks for help
    Rodrigo Lopes

    I see yere points but what I see on linux is it makes it to the constructor of the Java object and somewhere afterwards it bails out, the Java app does work alone. It appears to have problems initializing the JFrame, could there be a problem with the Java inheritance when a JVM is invoked throurgh native invocation??
    Here's some of the Java stuff
    public class Framework extends WindowAdapter {
        public int numWindows = 0;
        private Point lastLocation = null;
        private int maxX = 500;
        private int maxY = 500;
        public Framework() {
            System.out.println("JAVA Framework cnst");//GETTING HERE
            makeNewWindow();
        public void makeNewWindow() {
            System.out.println("JAVA makeWindow"); //GETTING HERE
            JFrame frame = new MyFrame(this); //NOT GETTING HERE!!!!!!!!!
            numWindows++;
            System.out.println("Number of windows: " + numWindows);
            System.out.println("Frame location: " + lastLocation);
            frame.setVisible(true);
            System.out.println("Post Java set frame visible");
        public static void main(String[] args) {
        System.out.println("Main method in Framework");
            Framework framework = new Framework();//GETTING HERE
    class MyFrame extends JFrame {
        protected Dimension defaultSize = new Dimension(200, 200);
        protected Framework framework = null;
        public MyFrame(Framework controller) {
            super("New Frame");
            System.out.println("MyFrame cnst ");//NOT GETTING HERE!!!!!!
            framework = controller;
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            addWindowListener(framework);
            JMenu menu = new JMenu("Window");
            menu.setMnemonic(KeyEvent.VK_W);
           setSize(defaultSize);
    }

  • JNI - Garbage Collector Problem ?

    Hi,
    I've got a JNI methode, which ceate and lauch a Process in c++ (a process to make VoIP).
    - this methode is returning an int=the pointer to the instance (which implement this process) so that othet JNI methode can have access to the main instance.
    Under windows, everything works fine, but
    Using linux:
    I add a memory wathcher on my program to see the memory used by the application / memory available for the JVM.
    The memory used by the application is growing (this is normal at this point), but when the GC is callled (by the system) the Java application is frozen (no error message), and I have to kill it. On the oter side, the Dll is running normally !
    My theory is that under Linux, the GC is "feeing" the memory used by the c++ process , then java is trying to write on it, but have no access, or somehing like that.
    Is there any option to be check this theory: as Java is retunring no error, but just freezing, it is not very clear to understand.
    I tried, using JNI, but removing the Process in it, just calling a basic operation, and there is no bug.
    Is there a special procedure to do on LINUX, for managing the Garbage Collector with JNI ?
    Here is a piece of code :
    /***********Java Side******************/
    //The JNI def:
    public class JNIWrapper {
         public JNIWrapper() {
         // create the h323 Process
    public native int create();
    ///The class managing the JNI methodes and containing the pointer to the dll main class
    public class CallControlH323 implements CallControl {
         int h323StackPtr; //Pointer to the h323stack, needed in the c++ side
         JNIWrapper myJNIWrapper;
         String options; //option for the CallControl configuration
         public CallControlH323(){
              myJNIWrapper = new JNIWrapper();
         public void configure(String options, String codecs) {
              h323StackPtr = myJNIWrapper.create();
    /*************************C++ side*****************/
    //JNI functions (file JNITerminal.cxx)
    #include "JNITerminal.h"
    #include <stdio.h>
    // Java Global Variables
    jobject jobj;
    JavaVM *jvm;
    /** Create the MainInterface **/
    JNIEXPORT jint JNICALL Java_ca_sess_voicesess_terminal_JNIWrapper_create
         (JNIEnv *env, jobject obj)
         // Make object a Global Reference
         jobj = env->NewGlobalRef(obj);
         // Get Java VM
         env->GetJavaVM(&jvm);
         //create and start the main Process
         MainInterface * mainInterface;
         mainInterface = new MainInterface();
         return ( ( jint ) mainInterface );
    MainInterface inherite from PProcess (from Pwlib), it is the top process of the dll application
    MainInterface::MainInterface():PProcess("", "", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER)
    #ifdef MSCVER
    #pragma warning(disable:4355)
    #endif
    #ifdef MSCVER
    #pragma warning(default:4355)
    #endif
         ShowOutputs("H323Lib: Create Main Interface");
    void MainInterface::Main () {}
    MainInterface::~MainInterface()
    /////////////////////////////////////////////////////////////////////////7
    If you have any suggestion, comment, help, don hesitate !!
    Thanks for your help
    Bart

    I also added the option -verbosegc to the java command.
    I noticed that the bug arrived after a Full gc:
    [Full GC 23301K->12351K(24844K), 0.3737040 secs]

  • Problem with JNI and Tomcat (and threads???)

    Howdy,
    Here is the issue - I would like some help on HOW to debug and fix this problem:
    2 test use cases -
    1)
    a)User goes to Login.jsp, enters user and password
    b) User submits to LoginServlet
    c) login calls JNI code that connects to a powerbuilder(Yes I know this is ugly) PBNI code module (this is a .dll) that authenticates the user with the database
    d) the servlet then redirects to another .jsp page
    e) user then submits to LogoutServlet - also a JNI call to a powerbuilder PBNI code module
    f) REPEAT STEPS a-e over a few times (inconsistent) and then the call to the JNI code hangs
    2)
    a) users does NOT goto Login.jsp, but rather calls LoginServlet and passes the userid and password as GET parms
    b) user does NOT get redirected to a page (redirect code commented out)
    c) user calls LogoutServlet
    d) repeat steps a-c at will and no failure, no hanging
    The only difference is that in case 1 (with JSP), there is a redirect and it afffected the JNI call by haniging inside JNI code.
    In case 2 (without JSP) there is still a JNI call, but it does not hang. In addition, when it hangs and I stop Tomcat, the logs show cleanup entries that say:
    Oct 19, 2004 9:17:09 AM org.apache.catalina.core.StandardWrapper unload
    INFO: Waiting for 1 instance(s) to be deallocated
    Oct 19, 2004 9:17:10 AM org.apache.catalina.core.StandardWrapper unload
    INFO: Waiting for 1 instance(s) to be deallocated
    Oct 19, 2004 9:17:11 AM org.apache.catalina.core.StandardWrapper unload
    INFO: Waiting for 1 instance(s) to be deallocated
    Is this a threading issue in Tomcat???
    On would assume that the JNI code is not cleaning up after itself, but I don't believe this is the case,
    and even if it was, why would I get the tomcat log cleanup entries above???
    What do those cleanup entries imply about the state of Tomcat????

    hi ,
    I met the same problem this morning, and searched the www.google.com in order to solve it, as a result, your article was shown on my screen. :)
    Till now I have read some technical information and solved my problems. Maybe the solution be useful to you:
    ==============================
    error message : (Environment : Tomcat 5, Windows 2003, Mysql5)
    2006-3-29 11:53:48 org.apache.catalina.core.StandardWrapper unload
    message: Waiting for 2 instance(s) to be deallocated
    ==============================
    cause: the number of connection to database exceeded.another word,too many connections.
    ==============================
    solution: close the connection when it becomes useless for your program. :)
    ==============================
    ps. Sorry for my weak English . hehe ....

  • Logical Database PNPCE and inherited Sub Area

    Hi,
    I have asked this in the HR forum but no response......
    I have a report using Logical Database PNPCE to find some values from a couple of info types. When I select a unit (from the 'OrgStructure' button at the top of the screen), say 111, and all its sub-units with no selections in the selection screen, I get one person displayed. This is correct and this person is in a sub-unit 3 levels down (unit 333).
    I then added a selection to only display people in units with Personnel SubArea 'OTEC'. Now I get no results output. When I look in PPOME, I can see that unit 333 has Personnel SubArea 'OTEC' but it is inherited from '111'.
    In PP01, unit 111 has an Account Assignment entry (Info Type 1008) but 333 does not.
    Does anyone know how to report on this?
    Is there a flag somewhere that tells the LDB to check for inherited units?
    If not, any ideas if there is a function out there to find the superior unit for these sub-units?
    Thanks.

    Thanks,
    I am aware of that FM but how do I find the parent unit in a clever fashion?
    The structure could have multiple levels e.g.
    Unit 1 - Unit 2a - Unit3a......
           - Unit 2b
           - Unit 2c
    Unit 1 is the parent and all the below units inherit from it.
    The LDB is looping through an internal table with a list of the units. It finds Unit 1 but not the rest.
    So, when the LDB is looking for Unit 3a, how does it know that Unit 1 is the parent?
    If I use that FM, I think I would have to look for all units above it and see if there is an Info Type 1008 exists. Seems like a lot of processing for something that should be simple?
    Kroc.

  • Inherited UserControl can not find XAML defined elements

    Hello,
    As the title suggests, I have a UserControl, called "DashboardControl", that is used across all of our games in a project that is shared among the games. In each of our projects we have a uniquely defined Dashboard.XAMLs that is specific to that
    project.
    This works fine for all of our projects but now I need to add some additional functionality unique to one project so I created a new UserControl called "GameSpecificDashboardControl" that inherits from the Dashboard. I changed the XAML so that
    it references the GameSpecificDashboardControl as it's view model. Unfortunately, whenever I call a Storyboard from the GameSpecificDashboardControl, I get the following error:
    "WinDisplay" name can not be found in name scope of GameSpecificDashboardControl
    In short, my GameSpecific is calling a Storyboard (which can be found) but the storyboard is trying to change an element that can not be found. What doesnt make sense is that not only is WinDisplay clearly defined in the XAML, but Snoop also shows the WinDisplay
    exists, as well as looping through the visual tree shows that WinDisplay exists.
    I'd appreciate any help anyone can give on this issue, I'm lost on ideas at this point.
    NOTE: If I move the 'sbBigWinIntro' & 'sbBigWinEnd' code to the 'PART_SBWinTickerIntro' & 'PART_SBWinTickerEnd' storyboards, I get no error. Unfortunately I need these animations to execute under certain conditions so keeping them
    in the PART_ storyboards doesnt work for me.
    NOTE2: The PART_ storyboards mentioned above are called in the base DashboardControl which I can not include in this post.
    Below are the XAML and code-behind files:
    XAML
    <ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:views="clr-namespace:Frozen7ViewModule.Views"
    xmlns:vwc="clr-namespace:ViewCommon;assembly=ViewCommon"
    xmlns:vwcd="clr-namespace:ViewCommon.Dashboard;assembly=ViewCommon"
    xmlns:vwcc="clr-namespace:ViewCommon.Converters;assembly=ViewCommon"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    xmlns:CustomControlLib="clr-namespace:CustomControlLib;assembly=CustomControlLib"
    mc:Ignorable="d">
    <Style TargetType="{x:Type views:GameSpecificDashboardControl}">
    <Setter Property="BoundCustomerBalance" Value="{Binding CustomerBalance}"/>
    <Setter Property="BoundWinAmount" Value="{Binding WinAmount}"/>
    <Setter Property="BoundBetAmount" Value="{Binding BetAmount}"/>
    <Setter Property="RaiseSoundCommand" Value="{Binding GVMSound.GameSoundCommand}"/>
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate>
    <ControlTemplate.Resources>
    <Storyboard x:Key="sbBigWinIntro" FillBehavior="HoldEnd" BeginTime="0:0:0.0">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:1.0" Value="200"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:1.0" Value="-300"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:1.0" Value="3"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:1.0" Value="3"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="WinBox_SolidBack">
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="sbBigWinEnd" FillBehavior="HoldEnd">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="633"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="348"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="WinDisplay">
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="WinBox_SolidBack">
    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/>
    </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    <Storyboard x:Key="PART_SBWinTickerIntro" FillBehavior="HoldEnd" BeginTime="0:0:0.0">
    </Storyboard>
    <Storyboard x:Key="PART_SBWinTickerEnd" FillBehavior="HoldEnd">
    </Storyboard>
    <Storyboard x:Key="PART_SBInfoTextIntro" FillBehavior="Stop">
    </Storyboard>
    </ControlTemplate.Resources>
    <Canvas x:Name="GameStateTarget" Width="1680" Height="200">
    <Canvas.Resources>
    <Style TargetType="{x:Type TextBlock}">
    <Setter Property="FontFamily" Value="/Frozen7ViewModule;component/Fonts/#Celtic Gaelige"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="FontSize" Value="60"/>
    </Style>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    </Canvas.Resources>
    <VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="ShowValueStateGroup">
    <VisualState x:Name="ShowMoneyState">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="WinAmountCredits">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="CustomerBalanceCredits">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="BetAmountCredits">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="TBInfoText">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="WinAmountMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="CustomerBalanceMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="BetAmountMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="TBInfoTextMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="ShowCreditsState">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="WinAmountCredits">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="CustomerBalanceCredits">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="BetAmountCredits">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="TBInfoText">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="WinAmountMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="CustomerBalanceMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="BetAmountMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="TBInfoTextMoney">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="VolumeStateGroup">
    <VisualState x:Name="VolumeMaxState">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(ContentControl.Content)" Storyboard.TargetName="VolumePercentTarget">
    <DiscreteObjectKeyFrame KeyTime="0" Value="100"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="VolumeMediumState">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(ContentControl.Content)" Storyboard.TargetName="VolumePercentTarget">
    <DiscreteObjectKeyFrame KeyTime="0" Value="66"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="VolMed">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="VolMax">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="VolumeLowState">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(ContentControl.Content)" Storyboard.TargetName="VolumePercentTarget">
    <DiscreteObjectKeyFrame KeyTime="0" Value="33"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="VolLow">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="VolMax">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="GameDenominationStateGroup">
    <VisualState x:Name="State_gfs7h25_cfg">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="OneDollarGameIcon">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="FiveDollarGameIcon">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="State_gfs7h100_cfg">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="TwentyFiveCentGameIcon">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="FiveDollarGameIcon">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="State_gfs7h500_cfg">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="TwentyFiveCentGameIcon">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="OneDollarGameIcon">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    </VisualStateGroup>
    <!--View Race States-->
    <VisualStateGroup x:Name="RaceVideoOptionAvailableStateGroup">
    <VisualState x:Name="RaceVideoOptionAvailableFalse">
    <Storyboard>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ViewRaceCanvas">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="MakePicksCanvas">
    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
    </ObjectAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="InfoCanvas">
    <DiscreteDoubleKeyFrame KeyTime="0:0:0.0" Value="1480"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Storyboard.TargetName="InfoCanvas">
    <DiscreteDoubleKeyFrame KeyTime="0:0:0.0" Value="417"/>
    </DoubleAnimationUsingKeyFrames>
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Storyboard.TargetName="VolCanvas">
    <DiscreteDoubleKeyFrame KeyTime="0:0:0.0" Value="415"/>
    </DoubleAnimationUsingKeyFrames>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="RaceViewOptionAvailableTrue">
    <Storyboard>
    </Storyboard>
    </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="RaceVideoSelectedStateGroup">
    <VisualState x:Name="RaceVideoSelectedFalse">
    <Storyboard>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="RaceVideoSelectedTrue">
    <Storyboard>
    </Storyboard>
    </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="BalanceIsPartialCreditStateGroup">
    <VisualState x:Name="BalanceIsPartialCreditFalse">
    <Storyboard>
    </Storyboard>
    </VisualState>
    <VisualState x:Name="BalanceIsPartialCreditTrue">
    <Storyboard>
    </Storyboard>
    </VisualState>
    </VisualStateGroup>
    <VisualStateGroup x:Name="ValidationStates">
    <VisualState x:Name="Valid"/>
    <VisualState x:Name="InvalidFocused"/>
    <VisualState x:Name="InvalidUnfocused"/>
    </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <i:Interaction.Behaviors>
    <vwc:VisualStateSyncStateToBoundValue BoundStateValue="{Binding RaceVideoOptionAvailable}" StateNamePrefix="RaceVideoOptionAvailable" VerifyTemplateChildName="ViewRaceCanvas"/>
    <vwc:VisualStateSyncStateToBoundValue BoundStateValue="{Binding RaceVideoSelected}" StateNamePrefix="RaceVideoSelected" VerifyTemplateChildName="ViewRaceOn"/>
    <vwc:VisualStateSyncStateToBoundValue BoundStateValue="{Binding BalanceIsPartialCredit}" StateNamePrefix="BalanceIsPartialCredit" VerifyTemplateChildName="CustomerBalanceCredits"/>
    </i:Interaction.Behaviors>
    <!--
    VolumeState storyboards update VolumePercentTarget,
    causing PropertyChangedTrigger to invoke SetVolumePercent() command on view model
    -->
    <!--
    VolumeState storyboards update VolumePercentTarget,
    causing PropertyChangedTrigger to invoke SetVolumePercent() command on view model
    -->
    <ContentControl x:Name="VolumePercentTarget" Content="0" Visibility="Hidden" >
    <i:Interaction.Triggers>
    <ei:PropertyChangedTrigger Binding="{Binding Content, ElementName=VolumePercentTarget}">
    <i:InvokeCommandAction Command="{Binding SetVolumePercent, Mode=OneTime}" CommandParameter="{Binding Content, ElementName=VolumePercentTarget}" />
    </ei:PropertyChangedTrigger>
    </i:Interaction.Triggers>
    </ContentControl>
    <Image x:Name="TwentyFiveCentGameIcon" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Denom_25.png" Canvas.Top="372" />
    <Image x:Name="OneDollarGameIcon" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Denom_100.png" Canvas.Top="372" />
    <Image x:Name="FiveDollarGameIcon" RenderTransformOrigin="0.5,0.5" Canvas.Left="-130" Canvas.Top="372"
    Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Denom_500.png" >
    <Image.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="0.7" ScaleY="0.9" />
    </TransformGroup>
    </Image.RenderTransform>
    </Image>
    <Canvas x:Name="ViewRaceCanvas" Canvas.Left="1380" Canvas.Top="417" >
    <Image x:Name="ViewRaceOff" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/ViewNextRace.png" />
    <Image x:Name="ViewRaceOn" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/ViewNextRace.png" />
    <Rectangle x:Name="HitBox_ViewRace" Width="{Binding ActualWidth, ElementName=ViewRaceOff}" Height="{Binding ActualHeight, ElementName=ViewRaceOff}" Fill="Green" Opacity="0" >
    <Rectangle.Resources>
    <sys:Boolean x:Key="BoolTrue">True</sys:Boolean>
    </Rectangle.Resources>
    <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonDown">
    <i:InvokeCommandAction Command="{Binding SetRaceVideoSelectedCommand, Mode=OneTime}" CommandParameter="{StaticResource BoolTrue}"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>
    </Rectangle>
    </Canvas>
    <Canvas x:Name="MakePicksCanvas" Canvas.Left="1490" Canvas.Top="321" >
    <Image x:Name="HandiPicks" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/YourPicks.png" />
    <TextBlock x:Name="First" Text="{Binding PlayerPicks[0], FallbackValue=-, Mode=OneWay, StringFormat=N0}" Canvas.Left="120" Canvas.Top="75" Width="24" Height="24" FontSize="24" TextAlignment="Center" Foreground="White" HorizontalAlignment="Stretch" FontFamily="/Frozen7ViewModule;component/Fonts/#Celtic Gaelige"/>
    <TextBlock x:Name="Second" Text="{Binding PlayerPicks[1], FallbackValue=-, Mode=OneWay, StringFormat=N0}" Canvas.Left="120" Canvas.Top="125" Width="24" Height="24" FontSize="24" TextAlignment="Center" Foreground="White" VerticalAlignment="Stretch"/>
    <TextBlock x:Name="Third" Text="{Binding PlayerPicks[2], FallbackValue=-, Mode=OneWay, StringFormat=N0}" Canvas.Left="120" Canvas.Top="175" Width="24" Height="24" FontSize="24" TextAlignment="Center" Foreground="White" HorizontalAlignment="Stretch"/>
    </Canvas>
    <!-- Info Canvas -->
    <Canvas x:Name="InfoCanvas" Canvas.Left="241" Canvas.Top="369" >
    <Image x:Name="InfoIcon" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Info_UI.png" />
    <Rectangle x:Name="InfoHitBox" Width="{Binding ElementName=InfoIcon, Path=ActualWidth}" Height="{Binding ElementName=InfoIcon, Path=ActualHeight}" Fill="Purple" Opacity="0" >
    <i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseLeftButtonDown">
    <i:InvokeCommandAction Command="{Binding ShowInfoCommand, Mode=OneTime}"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>
    </Rectangle>
    </Canvas>
    <!-- Volume Canvas -->
    <Canvas x:Name="VolCanvas" Canvas.Left="241" Canvas.Top="465" >
    <Image x:Name="VolMax" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Volume_High.png"/>
    <Image x:Name="VolMed" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Volume_Med.png" Visibility="Collapsed" />
    <Image x:Name="VolLow" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Volume_Low.png" Visibility="Collapsed" />
    <Rectangle Width="{Binding ActualWidth, ElementName=VolMax}" Height="{Binding ActualHeight, ElementName=VolMax}" Fill="Orange" Opacity="0" >
    <i:Interaction.Behaviors>
    <vwc:VisualStateCycleStateOnEvent EventName="MouseDown" EventOwnerType="{x:Type UIElement}" VisualStateGroupName="VolumeStateGroup"/>
    </i:Interaction.Behaviors>
    </Rectangle>
    </Canvas>
    <!-- Balance Display -->
    <Canvas x:Name="BalanceDisplay" Canvas.Left="357" Canvas.Top="409" DataContext="{Binding Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}" >
    <Image x:Name="Balance_UI" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Cash_UI.png" />
    <!-- Dynamic Balance Text -->
    <Grid x:Name="BalanaceGrid" Canvas.Left="15" Canvas.Top="15" >
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="0.748*"/>
    <ColumnDefinition Width="0.087*"/>
    <ColumnDefinition Width="0.165*"/>
    </Grid.ColumnDefinitions>
    <!-- Grid must be positioned within this canvas so its in the correct place of the background image -->
    <Grid x:Name="CustomerBalanceCredits" Grid.ColumnSpan="3" Width="230" Height="90" >
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto">
    <TextBlock x:Name="CustomerBalanceNormalCredits" Text="{Binding CustomerBalance.AltAmount, FallbackValue=87\,123\,456, Mode=OneWay, StringFormat=N0}" />
    </Viewbox>
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" >
    <TextBlock x:Name="CustomerBalancePartialCredits" Text="{Binding CustomerBalance.Amount, Converter={vwcc:IntToMoneyConverter}, FallbackValue=$871\,234.56, Mode=OneWay, StringFormat=C}" Visibility="Hidden"/>
    </Viewbox>
    </Grid>
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="3" Margin="0" Width="230" Height="90" >
    <TextBlock x:Name="CustomerBalanceMoney" Text="{Binding CustomerBalance.Amount, Converter={vwcc:IntToMoneyConverter}, FallbackValue=$871\,234.56, Mode=OneWay, StringFormat=C}" Visibility="Hidden"/>
    </Viewbox>
    </Grid>
    </Canvas>
    <!-- Win Display -->
    <Canvas x:Name="WinDisplay" Canvas.Left="633" Canvas.Top="348" RenderTransformOrigin="0.5,0.5" DataContext="{Binding Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}" >
    <Rectangle x:Name="WinBox_SolidBack" Canvas.Left="5" Canvas.Top="5" Width="441" Height="129" Fill="LightBlue" Opacity="0" />
    <Image x:Name="Win_Box" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Win_UI.png" >
    <Image.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="0.33" ScaleY="0.3" />
    </TransformGroup>
    </Image.RenderTransform>
    </Image>
    <!-- Dynamic Win Text -->
    <!-- Grid must be positioned within this canvas so its in the correct place of the background image -->
    <Grid x:Name="WinGrid" Canvas.Left="15" Canvas.Top="25" Visibility="{Binding ShowWinText, Converter={vwcc:BoolToHiddenConverter} }" >
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="430" Height="120" >
    <TextBlock x:Name="WinAmountCredits" Text="{Binding WinAmount.AltAmount, FallbackValue=123\,456, Mode=OneWay, StringFormat=N0}" FontSize="96"/>
    </Viewbox>
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="430" Height="120" >
    <TextBlock x:Name="WinAmountMoney" Text="{Binding WinAmount.Amount, Converter={vwcc:IntToMoneyConverter}, FallbackValue=$871\,234.56, Mode=OneWay, StringFormat=C}" Visibility="Hidden" FontSize="128"/>
    </Viewbox>
    </Grid>
    <Canvas.RenderTransform>
    <TransformGroup>
    <ScaleTransform ScaleX="1" ScaleY="1" />
    </TransformGroup>
    </Canvas.RenderTransform>
    </Canvas>
    <!-- Bet Display -->
    <Canvas x:Name="BetDisplay" Canvas.Left="1109" Canvas.Top="409">
    <Image x:Name="Bet_UI" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Dashboard/Bet_UI.png" />
    <!-- Dynamic Bet Text -->
    <!-- Grid must be positioned within this canvas so its in the correct place of the background image -->
    <Grid x:Name="BetGrid" Canvas.Left="15" Canvas.Top="15" >
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="230" Height="90" >
    <TextBlock x:Name="BetAmountMoney" Visibility="Hidden" Text="{Binding BetAmount, Converter={vwcc:IntToMoneyConverter}, FallbackValue=$871\,234.56, Mode=OneWay, StringFormat=C}"/>
    </Viewbox>
    <Viewbox Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Center" Width="230" Height="90" >
    <TextBlock x:Name="BetAmountCredits" Text="{Binding NumberBets, FallbackValue=$871\,234.56, Mode=OneWay, StringFormat=N0}"/>
    </Viewbox>
    </Grid>
    </Canvas>
    <Canvas x:Name="InfoTextCanvas" Canvas.Left="0" Canvas.Top="-473" DataContext="{Binding Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}" >
    <Image x:Name="PromptBar" Source="pack://siteoforigin:,,,/Frozen7ViewModule/Content/Bottom Screen/Background/PromptBar.png" />
    <Grid Width="1680" Height="62.5" Canvas.Top="8">
    <Grid.Resources>
    <Style BasedOn="{StaticResource {x:Type TextBlock}}" TargetType="{x:Type TextBlock}">
    <Setter Property="FontSize" Value="45"/>
    <Setter Property="Effect">
    <Setter.Value>
    <DropShadowEffect/>
    </Setter.Value>
    </Setter>
    <Setter Property="HorizontalAlignment" Value="Center" />
    </Style>
    </Grid.Resources>
    <!-- Info Prompts???? -->
    <TextBlock x:Name="TBInfoText" Text="{Binding InfoText, Mode=OneWay}" />
    <TextBlock x:Name="TBInfoTextMoney" Text="{Binding InfoTextMoney, Mode=OneWay}" />
    <TextBlock x:Name="PART_TBBonusInfo" Visibility="Collapsed"/>
    </Grid>
    </Canvas>
    <Rectangle x:Name="DisplayBoxesHitBox" Width="1020" Height="200" Fill="Red" Opacity="0" Canvas.Left="350" Canvas.Top="340" Panel.ZIndex="900" >
    <i:Interaction.Behaviors>
    <vwc:VisualStateCycleStateOnEvent EventName="MouseDown" EventOwnerType="{x:Type UIElement}" VisualStateGroupName="ShowValueStateGroup"/>
    </i:Interaction.Behaviors>
    </Rectangle>
    </Canvas>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
    </Style>
    </ResourceDictionary>
    GameSpecificDashboardControl  CODE BEHIND
    using Common;
    using ViewCommon;
    using ViewCommon.Dashboard;
    using Common.Events.Messages;
    using System;
    using System.Windows.Media.Animation;
    using System.Windows.Controls;
    using System.Windows;
    using System.Windows.Media;
    namespace Frozen7ViewModule.Views
    public class GameSpecificDashboardControl : DashboardControl
    private bool wasBigWin;
    private Storyboard sbBigWinIntro;
    private Storyboard sbBigWinEnd;
    private string _infoTextMoney;
    public string InfoTextMoney
    get { return _infoTextMoney; }
    private set
    _infoTextMoney = value;
    RaisePropertyChanged(() => InfoTextMoney);
    private bool _showWinText;
    public bool ShowWinText
    get { return _showWinText; }
    set
    _showWinText = value;
    RaisePropertyChanged(() => ShowWinText);
    private MultiPaylineControl multiPaylineControl;
    private int creditDivisor;
    public void Initialize(MultiPaylineControl multiPaylineControl)
    this.multiPaylineControl = multiPaylineControl;
    creditDivisor = GameParameters.Fetch.GameBetUnitCost;
    public override void OnApplyTemplate()
    base.OnApplyTemplate();
    sbBigWinIntro = this.LoadResourceStoryboard("sbBigWinIntro");
    sbBigWinEnd = this.LoadResourceStoryboard("sbBigWinEnd");
    public override void ClearPaylineInfo()
    base.ClearPaylineInfo();
    InfoTextMoney = "";
    public override void SetPaylineInfo(string info)
    base.SetPaylineInfo(info);
    InfoTextMoney = info;
    public override void OnPaylineLoop(MessageResultWin.Payline payline, int callCount)
    if (multiPaylineControl.IsJackpotWin() && payline.Tier == 0)
    // With current protocol, the Jackpot win amount is not easily determined for all case, do not try to show it
    InfoTextMoney = string.Format("Payline {0} Pays Jackpot", payline.PaylineIndex + 1);
    InfoText = InfoTextMoney;
    else
    int creditsBet = BoundBetAmount / creditDivisor;
    var creditString = (creditsBet > 2 && payline.Tier < 3) ? string.Format("X {0}", creditsBet - 1) : "";
    var multiplierString = payline.Multiplier > 1 ? string.Format("X {0}", payline.Multiplier) : "";
    string strTier = "(*Payline Tier Missing*)";
    if (payline.Tier >= 3) strTier = "1st Coin:";
    else if (payline.Tier < 3 && payline.Tier >= 0)
    //explicitly check for 2nd and 3rd coin for easier debugging if a bug ever occurs
    if (creditsBet == 2) strTier = "2nd Coin:";
    else if (creditsBet == 3) strTier = "3rd Coin:";
    InfoTextMoney = string.Format("Payline {0} Pays {1} {2:C}", payline.PaylineIndex + 1, strTier, (((double)payline.AmountWon) / 100) * payline.Multiplier);
    InfoText = string.Format("Payline {0} Pays {1} {2:N0}", payline.PaylineIndex + 1, strTier, (payline.AmountWon / creditDivisor) * payline.Multiplier);
    public void StartWinTicker(int bonusWinAmount, Action onBonusTickFinished, Action onWinTickFinished, int adjustAmount,bool isBigWin, bool fast = false)
    base.StartWinTicker(bonusWinAmount, onBonusTickFinished, onWinTickFinished, adjustAmount, fast);
    ShowWinText = true;
    if (isBigWin) sbBigWinIntro.Begin(this);
    wasBigWin = isBigWin;
    public override void OnWinTickFinished()
    base.OnWinTickFinished();
    if (wasBigWin) sbBigWinEnd.Begin();

    I agree with Barry - inheriting xaml is a problem.
    I think there is technically a way to sort of inherit xaml you put in app.xaml.  But I think that's a bad plan and I think the technique may well rely on a bug. Maybe it doesn't even work now - it's been a while since I read about it.
    I'm also not so clear on what you're trying to do here.
    I must admit I haven't spent very long trying to work out what that all that markup and code does though. 
    The three approaches I would consider are:
    1)
    Inherit just the code and substitute views completely.
    This is Barry's suggestion.
    2)
    Make a templated contentcontrol which you can put your variable stuff inside.
    Kind of like this:
    http://social.technet.microsoft.com/wiki/contents/articles/28597.wpf-keeping-your-mvvm-views-dry.aspx
    3)
    Compose the xaml from flat templates.
    https://gallery.technet.microsoft.com/Dynamic-XAML-View-Composer-8d9fa5d6
    https://gallery.technet.microsoft.com/Dynamic-XAML-Composed-View-e087f3c1
    Which to use depends on purpose.
    Hope that helps.
    Recent Technet articles: Property List Editing;
    Dynamic XAML

  • Couldn't Load DLL and Call JNI in Portal Servlet !!!

    Hello,
    I'm trying to write a small test servlet in portal which will call functions in a DLL using JNI. Here is my source code. I put my DLL in \Window\system32, usr/sap/J2E/JC01/j2ee/os_libs, even included into my portal project \PORTAL-INF\lib. But everytime when I try to preview my page, I got the following error and I couldn't find the log file specified in the error message. Please help me out. Thanks a lot!
    Portal Runtime Error
    An exception occurred while processing a request for :
    iView : N/A
    Component Name : N/A
    MyTestDLL.
    Exception id: 12:25_23/12/06_0029_11241950
    See the details for the exception ID in the log file
    Source Code:
    import com.sapportals.portal.prt.component.*;
    public class CIViewTest extends AbstractPortalComponent
         public void doContent(IPortalComponentRequest request, IPortalComponentResponse response)
              response.write("Hello From Java Servlet!!!\n");
         static {
              try {
                   Runtime.getRuntime().loadLibrary("MyTestDLL");
    // I've also tried System.LoadLibrary("MyTestDLL");
              } catch (UnsatisfiedLinkError ule) {
                   throw ule;

    Nobody used JNI in Portal Servlet??? Please advice. Thanks!

  • Application crashes when using JNI with Jdk 1,2, 1.3 and 1.4

    Hi!
    I have this application that has a GUI written in Java and a file parser written in C. JNI is used to connect these parts together. The problem is that the application only works when I am using jdk 1.1.8 but not when using jdk1.2, jdk1.3 or jdk1.4. I am running the application on a Solaris 8 machine.
    I have not written the application myself but I am going to be working with it from now on. But I have today little knowledge with JNI and I have tried different approaches to solve the problem. For example I have tried to used DDD together with GDB to find out what the problem is but with no luck. When I run the application using jdk1.4 I get the following error when the JVM crashes:
    An unexpected exception has been detected in native code outside the VM.
    Unexpected Signal : 10 occurred at PC=0xFA023164
    Function=Java_Bitmap_setDebug+0x1C
    Library=/usr/u/lal/micview/micview2_1_0_beta1/libBitmapImpl.so
    Current Java thread:
    at Bitmap.setDebug(Native Method)
    at DisplayPanel.loadFile(DisplayPanel.java:396)
    at MicPlot.loadFile(MicPlot.java:1452)
    at MicPlot.loadFile(MicPlot.java:1441)
    at MicPlot.miOpen_Action(MicPlot.java:1267)
    at MicPlot$SymAction.actionPerformed(MicPlot.java:1184)
    at java.awt.MenuItem.processActionEvent(MenuItem.java:588)
    at java.awt.MenuItem.processEvent(MenuItem.java:548)
    at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:285)
    at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:273)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:452)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
    Dynamic libraries:
    0x10000 /opt/java/jdk1.4/bin/java
    0xff360000 /usr/lib/libthread.so.1
    0xff3a0000 /usr/lib/libdl.so.1
    0xff280000 /usr/lib/libc.so.1
    0xff270000 /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1
    0xfe000000 /opt/java/j2sdk1.4.1/jre/lib/sparc/client/libjvm.so
    0xff220000 /usr/lib/libCrun.so.1
    0xff200000 /usr/lib/libsocket.so.1
    0xff100000 /usr/lib/libnsl.so.1
    0xff1d0000 /usr/lib/libm.so.1
    0xff250000 /usr/lib/libw.so.1
    0xff0e0000 /usr/lib/libmp.so.2
    0xff0b0000 /opt/java/j2sdk1.4.1/jre/lib/sparc/native_threads/libhpi.so
    0xff080000 /opt/java/j2sdk1.4.1/jre/lib/sparc/libverify.so
    0xff030000 /opt/java/j2sdk1.4.1/jre/lib/sparc/libjava.so
    0xfe7e0000 /opt/java/j2sdk1.4.1/jre/lib/sparc/libzip.so
    0xfe4e0000 /usr/lib/locale/en_US.ISO8859-1/en_US.ISO8859-1.so.2
    0xedd00000 /opt/java/j2sdk1.4.1/jre/lib/sparc/libawt.so
    0xfc480000 /opt/java/j2sdk1.4.1/jre/lib/sparc/libmlib_image.so
    0xfc410000 /opt/java/j2sdk1.4.1/jre/lib/sparc/motif21/libmawt.so
    0xeda80000 /usr/dt/lib/libXm.so.4
    0xfa090000 /usr/openwin/lib/libXt.so.4
    0xfa3d0000 /usr/openwin/lib/libXext.so.0
    0xfc7e0000 /usr/openwin/lib/libXtst.so.1
    0xed980000 /usr/openwin/lib/libX11.so.4
    0xfa2a0000 /usr/openwin/lib/libdps.so.5
    0xfa3b0000 /usr/openwin/lib/libSM.so.6
    0xfa1d0000 /usr/openwin/lib/libICE.so.6
    0xed880000 /opt/java/j2sdk1.4.1/jre/lib/sparc/libfontmanager.so
    0xfa390000 /usr/openwin/lib/locale/common/xlibi18n.so.2
    0xfa1b0000 /usr/openwin/lib/locale/iso8859-1/xomEuro.so.2
    0xfa190000 /usr/lib//liblayout.so
    0xfa050000 /usr/openwin/lib/locale/common/ximlocal.so.2
    0xfa010000 /usr/u/lal/micview/micview2_1_0_beta1/libBitmapImpl.so
    Local Time = Thu Oct 3 13:32:47 2002
    Elapsed Time = 35
    # The exception above was detected in native code outside the VM
    # Java VM: Java HotSpot(TM) Client VM (1.4.1-beta-b14 mixed mode)
    # An error report file has been saved as hs_err_pid27692.log.
    # Please refer to the file for further information.
    Abort
    From this information I think that the problem should be in the native method setDebug. But I have tried to set a breakpoint at the beginning of that function in the C part but with no luck. The application crashes before it reaches that position in the C file.
    What could possibly go wrong between the setDebug function in the C part and the function call in the Java part?
    When using GDB, GDB cannot figure out what is wrong it just returns a hex address, no function name.
    I would really appreciate some help. I have tried everything that I can come up with!
    Best regards
    Lars

    I have figured out that the application fails on its first call to the native methods.
    So I have this Bitmap class that contains all the native calls and it is defined shortly as follow:
    public class Bitmap {
    static {
    System.loadLibrary("BitmapImpl");
    native void setDebug(int debuglevel, int statistics);
    There are many more native methods defined in Bitmap, but I only show the setDebug method because that is the first one that is executed and also the one that immediately fails.
    My setDebug C function is defined as follow in BitmapImpl.c
    #include <time.h>
    #include <stdio.h>
    #include <limits.h>
    #include <fcntl.h>
    #include <jni.h>
    #include <math.h>
    #include <errno.h>
    #include "Bitmap.h"
    #include "data.h"
    jint debug = 0;
    jint statistics = 1;
    JNIEXPORT void JNICALL Java_Bitmap_setDebug
    (JNIEnv *jenv, jobject jo, jint d, jint s)
    debug = d;
    statistics = s;
    My libBitmapImpl.so file is compiled using the following Makefile and using GNU gcc:
    JAVAPATH=$(JAVAINCLUDEPATH)
    LMACRO=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DSOLARIS
    CSOURCE=BitmapImpl.c
    all:
    gcc -O3 -G $(LMACRO) -I$(JAVAPATH) -I$(JAVAPATH)/solaris \
    $(CSOURCE) -o libBitmapImpl.so
    It is still a total mystory why the application fails. I have tried it on a RedHat Linux machine and there it works fine. But not on Solaris. Only if I use the jdk1.1.8 but not a later one.
    Would really appreiciate some help!
    Best regards
    Lars

  • 64-bit JNI C++ to JAVA invocation multiple threads classloader problem

    Hi ALL,
    I have a C++ app that invokes Java classes on 64-bit Solaris 10 with 64-bit JVM.
    Here is the problem:
    The native non-main (not the thread that initializes the JVM) threads would not be able to find any user-define class.
    Here are the symptoms and observations:
    1. JNIEnv::ExceptionDescribe() showed the following StackOverflowError:
    Exception in thread "Thread-0" java.lang.StackOverflowError
            at java.util.Arrays.copyOf(Arrays.java:2734)
            at java.util.Vector.ensureCapacityHelper(Vector.java:226)
            at java.util.Vector.addElement(Vector.java:573)
            at java.lang.ClassLoader.addClass(ClassLoader.java:173)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
            at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)2. The "main thread" that instantiates the JVM has no problem finding and loading any class or method
    3. But the other threads (non-main threads) would not be able to find the user-defined classes unless the classes were already loaded by the main thread.
    4. The non-main threads can find the "standard" java classes with no problem
    5. The same app ran fine on 32-bit system.
    6. Except for the JVM reference is global, each thread acquired JNIEnv by either GetEnv() or AttachCurrentThread().
    Any idea why it is a problem with 64-bit?
    I have the sample program to reproduce this issue in this thread: http://forums.sun.com/thread.jspa?messageID=10885363&#10885363. That was the original thread I raised but I have narrowed it down to a more concrete scenario. That's why I am creating this new thread. I hope this does not break any rule on this forum. If it does, I apologize.
    I really appreciate it if anyone can provide any help/suggestion.
    Regards,
    - Triet

    Here is the sample program. Again, this works on 32-bit but not 64-bit.
    #include <string>
    #include "jni.h"
    #include "TestThread.h"
    static JavaVM *g_pjvm = NULL;  /* denotes a Java VM */
    static JNIEnv *g_penv = NULL;  /* pointer to native method interface */
    void initJVM(char** jvmOptions) {
        printf("RJniTest init starts...\n");
        JavaVMInitArgs vm_args; /* JDK/JRE 6 VM initialization arguments */
        JavaVMOption* poptions;
        int optionLen = 0;
        while (jvmOptions[optionLen]) {
            optionLen++;
        printf("RJniTest::init len=%d\n", optionLen);
        if (optionLen > 0) {
            printf("RJniWrapper::init jvmOptions\n");
            poptions = new JavaVMOption[optionLen];
            //poptions[0].optionString = "-Djava.class.path=/usr/lib/java";
            int idx = 0;
            while (jvmOptions[idx]) {
                poptions[idx].optionString = jvmOptions[idx];
                idx++;
        printf("RJniTest::init vm_args: version(%x), nOptions(%d)\n",
                JNI_VERSION_1_6, optionLen);
        vm_args.version = JNI_VERSION_1_6;
        vm_args.nOptions = optionLen;
        vm_args.options = poptions;
        vm_args.ignoreUnrecognized = JNI_FALSE;
        // load and initialize a Java VM, return a JNI interface
        // pointer in env
        printf("RJniTest::init creates JVM\n");
        JNI_CreateJavaVM(&g_pjvm, (void**)&g_penv, &vm_args);
        printf("RJniTest init ends\n");
    void findClass(const char* classname) {
        static const char* fname = "justFindClasses";
        printf("%s: findClass: %s\n", fname, classname);
        JNIEnv* jenv;
        jint ret = g_pjvm->GetEnv((void**)&jenv, JNI_VERSION_1_6);
        if (ret == JNI_EDETACHED) {
            ret = g_pjvm->AttachCurrentThread((void**)&jenv, NULL);
            if (ret != JNI_OK || jenv == NULL) {
                printf("%s: get env error: ret=%d\n", ret, fname);
            } else {
                printf("%s: got new env\n", fname);
        } else if (ret == JNI_OK) {
            printf("%s: env already there\n");
        jclass classref;
        classref = jenv->FindClass(classname);
        if (classref == NULL) {
            printf("%s: %s class not found!\n", fname, classname);
            if (jenv->ExceptionOccurred()) {
                jenv->ExceptionDescribe();
                jenv->ExceptionClear();
        printf("%s: found class: %s\n", fname, classname);
    class RJniTestThread : public TestThread {
    public:
        void threadmain();
    void RJniTestThread::threadmain() {
        printf("RJniTestThread::threadmain: Starting testing\n");
        findClass("org/apache/commons/logging/Log");
        findClass("java/util/List");
        printf("RJniTestThread::threadmain: done.\n");
    int main(int argc, char** argv) {
        char **jvmOptions = NULL;
        printf("RJniTestDriver starts...\n");
        if (argc > 1) {
            jvmOptions = new char*[argc];
            for (int i = 0; i < argc ; i ++) {
                jvmOptions[i] = argv[i + 1];
            jvmOptions[argc - 1] = NULL;
        } else {
            int size = 8;
            int i = 0;
            jvmOptions = new char*[size];
            jvmOptions[i++] = (char*) "-Djava.class.path=<list of jar files and path here>";
            jvmOptions[i++] = (char*) "-Djava.library.path=/sandbox/mxdev/3rdparty/java/unix/jdk1.6.0_14/jre/lib/sparc";
            jvmOptions[i++] = (char*) "-Djava.compiler=NONE";
            jvmOptions[i++] = (char*) "-verbose:jni";
            jvmOptions[i++] = (char*) "-Xcheck:jni";
            jvmOptions[i++] = NULL;
        printf("init JVM\n");
        initJVM(jvmOptions);
        // UNCOMMENT HERE
        // findClass("org/apache/commons/logging/Log");
        // findClass("java/util/List");
        // UNCOMMENT END
        printf("start test thread\n");
        RJniTestThread testThread;
        ThreadId tid = testThread.launch();
        printf("wait for test thread\n");
        int ret = pthread_join(tid, NULL);
        printf("RJniTestDriver ends\n");
    }

  • Difference between inheritance and abstract class

    difference between inheritance and abstract class

    See this thread:
    http://forum.java.sun.com/thread.jspa?forumID=24&threadID=663657
    And before Post New Topic, just search in this forums. All most will get answers.

  • For loops & inheritance question

    I am trying this exercise dealing w/inheritance. I enter at command line a random number of c's, s's and m's. for checking,savings and money market. I then parse the string and check for the character. From there I create one of the accounts. then I am supposed to make a report that displays the past 3 months activities. the first account created gets 500 deposit the from there each account after the first gets an additional 400. so it would be: 500,900,1300,etc. Here is what I have so far, but the report part is where I can't figure out exactly how to go about solving it. Thanks in advance.
    public static void main( String args[] ){
         int intDeposit = 500;
         char charTest;
         Object [] objArray = new Object[args[0].length()];
         for ( int j = 0; j < 3; j ++ ){                        System.out.println( "Month " + ( j +1 ) + ":" );
             for( int i = 0; i < args[ 0 ].length(); i ++ ){
              charTest = args[ 0 ].charAt( i );
                         if (charTest == 'c' ){
                  BankAccount at = new  CheckingAccount( intDeposit );
                  objArray=at;
              else if( charTest == 's' ){
              BankAccount at = new SavingsAccount( intDeposit );
              objArray[i]=at;
              else if( charTest == 'm' ){
              BankAccount at = new MoneyMarket( intDeposit );
              objArray[i]=at;
              else{
              System.out.println( "invalid input" );
              }//else
              intDeposit += 400;
              System.out.println();
         }//for j
         for (int counter = 0; counter < objArray.length; counter ++ ){
              System.out.println( "Account Type: " +
                        objArray[counter].toString() );
              System.out.println( "Initial Balance: " +
                        (BankAccount) objArray[counter].getCurrentBalance() );
         System.out.println( "TotalDeposits: " + objArray[counter].getTotalDeposits() );
         System.out.println();
         }//for i
    }//main
    }//TestBankAccount.java\

    The only thing I think is wrong is the following line:
    System.out.println( "Initial Balance: " +                    (BankAccount) objArray[counter].getCurrentBalance() );
    Should be:
    System.out.println( "Initial Balance: " +                    ((BankAccount) objArray[counter]).getCurrentBalance() );

  • Problem with inheritance and outputting values in toString.

    Hey guys, i'm having a major problem with inheritances.
    What i'm trying to do with my program is to create objects in my demo class. Values are passed to several other objects that each do their own calculations of grades and results and then outputs the result in my toString. I followed step by step the instructions in my book on how to setup the inheritance and such. I can only output everything that was created in my superclass, any other thing that was created in an object that belongs to a subclass does not display in the output at all.
    Even if I change or create new instance variables, I can't figure out for the life of myself how to output the other values.
    Because there's so much code to be splitting on the forums, I zipped my whole project in a RAR. I'll link it here
    http://www.4shared.com/file/ZleBitzP/Assign7.html
    The file to run the program is CourseGradesDemo class, everything else is either a subclass or superclass to some part of the program. After you run CourseGradesDemo, you will see the output, and understand what displays and what stays at 0.0 value. If anyone can help me out with this it would be greatly appreciated
    Thanks in advance.

    Basshunter36 wrote:
    Hey guys, i'm having a major problem with inheritances.
    What i'm trying to do with my program is to create objects in my demo class. Values are passed to several other objects that each do their own calculations of grades and results and then outputs the result in my toString. I followed step by step the instructions in my book on how to setup the inheritance and such. I can only output everything that was created in my superclass, any other thing that was created in an object that belongs to a subclass does not display in the output at all.
    Even if I change or create new instance variables, I can't figure out for the life of myself how to output the other values.No idea what you're talking about. Provide an [url http://sscce.org]SSCCE.
    Because there's so much code to be splitting on the forums, I zipped my whole project in a RAR. I'll link it here
    http://www.4shared.com/file/ZleBitzP/Assign7.html
    Not gonna happen. Provide an [url http://sscce.org]SSCCE. And don't say you can't. You definitely can. You may have to spend an hour building a new program from scratch and getting it to reproduce the problem, but if you can't or won't do that, you'll find few people here willing to bother with it.

  • Having a problem with inheritance and a constructor

    i have two classes, i'm just going to give the constructors anyway. I'm having trouble getting the CDImage constructor to inherit something from songs, I believe the instructions are missing something or the cs lab guy misinterpreted them.
    package songs;
    import java.text.*;
    public class Song implements Comparable {
        private int songLength;
        private String artistName;
        private String songName;
        public Song(int songLength, String artistNames, String songName) {
            this.songLength = songLength;
            this.artistName = artistNames;
            this.songName = songName;
        }These are the instructions that i beleive may be incorrect:
    Design a CDImage class to represent a music CD. The constructor takes three parameters: the title of the CD, the recording label, and the number of tracks on the CD. (Each track contains one song.) The CDImage class uses the Song class developed above and should contain methods to accomplish the following:package songs;
    import java.text.*;
    public class CDImage extends Song {
        private String title;
        private String label;
        private int numberTracks;
        private Song[] songs;
        public CDImage(String title, String label, int tracks){
        this.title = title;// this is the album name
        this.label = label;
        numberTracks = tracks;
        songs = new Song [numberTracks];
        }i know i need to use the super modifier under the constructor but how? because nothing in the constructor of the CDImage class refers directly to the constructor in the Song class
    thanks in advance.
    Message was edited by:
    kevin123

    you know whats funny, this project has to do with arrays of objects and not inheritance. We learned inheritance last week but the lab we are doing which is this, is for arrays of objects. sorry for the confusion lol. so you can completely ignore this, it actually has it in big bold letters at the top of the web page for the lab.

Maybe you are looking for

  • How do I get map info? All I get is a blank grid.

    When starting the maps app the only thing that shows up is a grid.In all three (3) views there is not a thing that shows up except for the pin that marks the current posistion.

  • How can I center the chart inside the portlet?

    Hi, I created a bar chart and published it as a portlet. The chart is left-positioned inside the portlet which doesn't look good. How can I center it? Thank you in advance for your help.

  • System log contains mail errors for "mail cp:"

    Hello, My system log is filled with this message that occurs periodically. The server seems to work okay, but I could use your guidance on what it might be? Jan 1 03:14:58 mail cp: error processing extended attributes: Operation not permitted I canno

  • Emailing photos to friends

    When I email photos from my iphoto library to friends, I hit the "email" button at the bottom right part of the screen. It opens an email box, then strips in the actual photos into the message itself. There is no indication that the actual photo file

  • Configuration docs for Validation and Subsituation

    Hi, Can you any body forward me configuration docs related to Validation and subsituation on my e-mail id   :-  [email protected] Thanx & Regards Sandeep