Announcement

Collapse
No announcement yet.

Java unhandled exception error

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Java unhandled exception error

    '***********************************************
    'The code below is a MUST see
    'Forget about the java error and see the code!
    '***********************************************


    java/lang/NoSuchMethodError was not handled.
    Would you like to debug the application?

    Tried calling browser using VB6 and get same error.


    The error occurs by visiting http://www.java.com
    Click on Dukes Zone
    Error occurs when Duke's little animation window attempts to animate.


    The error doe not occur using IE7.

    Just tested using Windows 98SE and it works.
    Animation doesn't display, but no java exception error to debug.

    The error doe not occur using IE6.

    This error is trivial compared to adding printing support.




    [This message has been edited by Mike Doty (edited June 24, 2007).]

  • #2
    'Heck, it isn't that much code and it is a must see!
    '
    Code:
    'To do list:
    '1 Print button
    '    With printing all internet and local documents right here
    '    with the benefit of images within html documents!
    '
    '2 Refresh button
    '3 Stop button
    '
    '4 Get to work in PbForms
    '5 Add html editing (a whole new subject)
    '6 Add upload capability
    'With the above you could download/upload and display on-the-fly!
    '
    'Help system could also be written using html and used with this.
    'Internet documents and local documents available easily.
    '
    '
    'Is ATL.DLL present in all versions of Windows? Works with Windows 98, too.

    'A browser within DDT, wow!
    '
    '***********************************************************
    'This is the most valuable code I've seen in a long time.
    '***********************************************************
    'Code by Jose Roca (of course.)
    Code:
    '
    '
    'New version of the first example. I have made the dialog modeless to
    'be able to pass the keystrokes to the WebBrowser control for processing,
    'otherwise the main dialog will eat them and shortcuts like Ctrl-C
    'won't work.
    
      #DIM ALL
      #INCLUDE "win32api.inc"
    
      %WM_FORWARDMSG = &H37F ' (895)
    
      %ID_OCX     = 1001
      %IDC_URL    = 1010
      %IDC_BTNAVG = 1011
      %IDC_BTBACK = 1012
      %IDC_BTFRWD = 1013
      %IDC_LABEL1 = 1014
    
      GLOBAL hDlg AS DWORD
      GLOBAL hOcx AS DWORD
      GLOBAL oOcx AS DISPATCH
    
    
      DECLARE FUNCTION AtlAxWinInit LIB "ATL.DLL" ALIAS "AtlAxWinInit" () AS LONG
    ' *********************************************************************************************
      DECLARE FUNCTION AtlAxWinTerm () AS LONG
    ' *********************************************************************************************
      FUNCTION AtlAxWinTerm () AS LONG
        UnregisterClass ("AtlAxWin", GetModuleHandle(BYVAL %NULL))
      END FUNCTION
    ' *********************************************************************************************
    ' **********************************************************************************************
      DECLARE FUNCTION AtlAxGetControl LIB "ATL.DLL" ALIAS "AtlAxGetControl" _
         ( _
         BYVAL hWnd AS DWORD, _   ' [in] A handle to the window that is hosting the control.
         BYREF pp AS DWORD _      ' [out] The IUnknown of the control being hosted.
      ) AS DWORD
    ' *********************************************************************************************
    
    ' *********************************************************************************************
    ' Puts the address of an object in a variant and marks it as containing a dispatch variable
    ' *********************************************************************************************
      SUB AtlMakeDispatch ( _
         BYVAL lpObj AS DWORD, _                        ' Address of the object instance
         BYREF vObj AS VARIANT _                        ' Variant to contain this address
         ) EXPORT
    
         LOCAL lpvObj AS VARIANTAPI PTR                 ' Pointer to a VARIANTAPI structure
         LET vObj = EMPTY                               ' Make sure is empty to avoid memory leaks
         lpvObj = VARPTR(vObj)                          ' Get the VARIANT address
         @lpvObj.vt = %VT_DISPATCH                      ' Mark it as containing a dispatch variable
         @lpvObj.vd.pdispVal = lpObj                    ' Set the dispatch pointer address
    
      END SUB
    ' *********************************************************************************************
    
    ' *********************************************************************************************
    ' Main dialog callback
    ' *********************************************************************************************
      CALLBACK FUNCTION MainDlgProc()
    
         LOCAL rc AS RECT
         LOCAL r AS LONG
         LOCAL x AS LONG
         LOCAL y AS LONG
         LOCAL xx AS LONG
         LOCAL yy AS LONG
    
    
         SELECT CASE CBMSG
    
            CASE %WM_SIZE
               GetClientRect CBHNDL, rc
               x = rc.nLeft
               y = rc.nTop
               xx = rc.nRight - rc.nLeft
               yy = rc.nBottom - rc.nTop - 32
               MoveWindow hOcx, x, y, xx, yy, %TRUE
    
            CASE %WM_DESTROY
               PostQuitMessage 0
    
            CASE %WM_COMMAND
               SELECT CASE CBCTL
                  CASE %IDCANCEL
                     IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        DIALOG END CBHNDL, 0
                     END IF
                  CASE %IDC_BTNAVG
                     IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        LOCAL strUrl AS STRING, vVar AS VARIANT
                        CONTROL GET TEXT CBHNDL, %IDC_URL TO strUrl
                        vVar = strUrl
                        OBJECT CALL oOcx.Navigate(vVar)
                     END IF
                  CASE %IDC_BTBACK
                     IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        OBJECT CALL oOcx.GoBack
                     END IF
                  CASE %IDC_BTFRWD
                     IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        OBJECT CALL oOcx.GoForward
                     END IF
               END SELECT
    
         END SELECT
    
      END FUNCTION
    ' *********************************************************************************************
    
    ' *********************************************************************************************
    ' Main
    ' *********************************************************************************************
      FUNCTION PBMAIN
    
         LOCAL hInst AS DWORD
         LOCAL hr AS DWORD
         LOCAL OcxName AS ASCIIZ * 255
         LOCAL pUnk AS DWORD
         LOCAL vVar AS VARIANT
         LOCAL uMsg AS tagMsg
         LOCAL dwCookie AS DWORD
    
         OcxName = "Shell.Explorer"
    
         AtlAxWinInit   ' // Initializes ATL
    
         DIALOG NEW 0, "A Web Browser in a DDT dialog",,, 528, 334, %WS_OVERLAPPEDWINDOW, 0 TO hDlg
         CONTROL ADD "AtlAxWin", hDlg, %ID_OCX, OcxName, 0, 0, 0, 0, %WS_VISIBLE OR %WS_CHILD
         CONTROL HANDLE hDlg, %ID_OCX TO hOcx
         CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "URL", 226, 322, 16, 12
         CONTROL ADD TEXTBOX, hDlg, %IDC_URL, "", 250, 320, 210, 14
         CONTROL ADD BUTTON, hDlg, %IDC_BTNAVG, "&Navigate", 470, 320, 46, 14, %WS_TABSTOP OR %BS_DEFAULT
         CONTROL ADD BUTTON, hDlg, %IDC_BTBACK, "&Back", 5, 320, 46, 14, %WS_TABSTOP
         CONTROL ADD BUTTON, hDlg, %IDC_BTFRWD, "&Forward", 58, 320, 46, 14, %WS_TABSTOP
         CONTROL SET TEXT hDlg, %IDC_URL, "http://www.java.com"
    
         AtlAxGetControl(hOcx, pUnk)
         AtlMakeDispatch(pUnk, vVar)
         SET oOcx = vVar
    
         SetFocus(hOcx)
         DIALOG SHOW MODELESS hDlg, CALL MainDlgProc TO hr
    
         WHILE GetMessage(uMsg, %NULL, 0, 0)
            '// Pass keyboard messages to the ancestor
            '// Returns 0 if the message was not processed, nonzero if it was
            IF SendMessage(hOcx, %WM_FORWARDMSG, 0, VARPTR(uMsg)) = 0 THEN
               IF IsDialogMessage(hDlg, uMsg) = %FALSE THEN
                  TranslateMessage uMsg
                  DispatchMessage uMsg
               END IF
            END IF
         WEND
    
         AtlAxWinTerm   ' // Uninitializes ATL
         SET oOcx = NOTHING
    
      END FUNCTION
    ' *********************************************************************************************

    ------------------




    [This message has been edited by Mike Doty (edited June 24, 2007).]

    Comment


    • #3
      TOOOO COOOOOL!!!

      I Love IT!! I am posting this thru the program!

      I'll check the Java site,

      Thanks! Mike & Jose

      ------------------
      Washington DC Area
      Borje's "Poff's" is likely the BEST tool for learning PB.. http://www.reonis.com/POFFS/index.htm
      And a few PBTool's & Beginner Help:http://sweetheartgames.com/PBTools/JumpStart.html
      & Another Good Resource: http://www.fredshack.com/docs/powerbasic.html

      Comment


      • #4
        I'm adding new items to wish list, now.
        Hope others see this code.

        Code:
        'To do list:
        '1 Print button
        '    With printing all internet and local documents right here
        '    with the benefit of images within html documents!
        '
        '2 Refresh button
        '3 Stop button
        '
        'Down the road:
        '4 Get to work in PbForms
        '5 Add html editing
        '6 Add upload capability
        'With the above you could download/upload and display on-the-fly to anyone in the world!
        ------------------




        [This message has been edited by Mike Doty (edited June 24, 2007).]

        Comment


        • #5
          Mike the animations work here,

          I have default browser

          Firefox/1.5.0.12

          XP pro, 2002, service pak 2

          ------------------
          Washington DC Area
          Borje's "Poff's" is likely the BEST tool for learning PB.. http://www.reonis.com/POFFS/index.htm
          And a few PBTool's & Beginner Help:http://sweetheartgames.com/PBTools/JumpStart.html
          & Another Good Resource: http://www.fredshack.com/docs/powerbasic.html

          Comment


          • #6
            Thanks, Brad. Duke said "Hi", then.
            It works with the IE7 browswer here, but not the PB code.
            Again, trivial compared to getting printing capability.


            ------------------

            Comment


            • #7
              hmmm, I take that back, the code must still be using my IE7 that I have
              installed, because if I simply open http://java.com/en/dukeszone/ in the Firefox browser itself the animation doesn't play

              ------------------
              Washington DC Area
              Borje's "Poff's" is likely the BEST tool for learning PB.. http://www.reonis.com/POFFS/index.htm
              And a few PBTool's & Beginner Help:http://sweetheartgames.com/PBTools/JumpStart.html
              & Another Good Resource: http://www.fredshack.com/docs/powerbasic.html

              Comment


              • #8
                There was a recent Java update recently which I was required to
                install. The animation does play within IE7 browser.
                I'm updating Java on an older Windows 98 SE machine, now.
                There is a option to verify now to see the current Java version.

                Followed update instruction and found no option in browser for
                Java2 within Windows 98 SE. Looked in XP with IE7 and find
                no option for Java2 there, either.

                ------------------


                [This message has been edited by Mike Doty (edited June 24, 2007).]

                Comment


                • #9
                  brad,
                  if this is you, looks like you have been this route for printing. http://www.powerbasic.com/support/pb...ad.php?t=24222

                  ------------------

                  Comment


                  • #10
                    here is how to print: http://www.powerbasic.com/support/pb...ad.php?t=24237

                    'now need to piece them together

                    ------------------

                    Comment


                    • #11
                      hehe, yeah Mike, I knew this all looked pretty familar,

                      most of that code is on an old machine, I'll try to dig it out tonight
                      after I get some pressing work done, I'm glad you re-opened this topic
                      it's actually good timing for me, I was into a web interface I wasn't
                      sure how to handle!

                      ------------------
                      Washington DC Area
                      Borje's "Poff's" is likely the BEST tool for learning PB.. http://www.reonis.com/POFFS/index.htm
                      And a few PBTool's & Beginner Help:http://sweetheartgames.com/PBTools/JumpStart.html
                      & Another Good Resource: http://www.fredshack.com/docs/powerbasic.html

                      Comment


                      • #12
                        'great. i need to leave (really great code.)
                        'project for the week! a web browser with printing/preview and within ddt!
                        'looks like some of you already have it! ''
                        '
                        'definitely start another thread (if you would.)'
                        'i've got the code combined, but not working yet.
                        '
                        'mike

                        'found this one that already prints, but doesn't take a url as is. http://www.powerbasic.com/support/pb...ad.php?t=24065




                        [this message has been edited by mike doty (edited june 24, 2007).]

                        Comment


                        • #13
                          Originally posted by Mike Doty:

                          java/lang/NoSuchMethodError was not handled.
                          Would you like to debug the application?
                          Wouldn't worry too much about Java Applets not working - it's pretty
                          much a dead technology, for a couple of reasons: 1. Flash players are
                          installed in something like 97% of desktop browsers, vs. a far smaller
                          percentage with the JRE installed. 2. The JRE still takes forever
                          to load and start an applet running, while Flash applets start up
                          almost instantly. 99.999% of those irritating animated ads on the
                          web are using your Flash player.

                          Now, if you're talking cell phones or app servers, Java is pervasive, just
                          not on the desktop.


                          ------------------

                          --pdf
                          --pdf

                          Comment


                          • #14
                            A browser in my app is way cool. I don't know why I haven't done more with it so far, but I will ... but to my question ...

                            With a URL displayed, as with the code from Jose up in post#2, can I capture all the displayed text? That would be most useful in one of my apps.

                            I don't know enough about the technique to know if there's a simple method or two that will do the trick. I don't care about maintaining formatting.

                            I could download the *.htm file and try to parse out the HTML stuff, but it would seem like that smart thing to do to let the browser control do it for me, and just work with the results.

                            I'll go look into it, but I thought someone more familiar with the code might have a ready-at-hand solution!

                            ... added ... if there are no built-in methods to the browser control, then programmatically sending Ctrl-A and then Ctrl-C to the browser control would be just fine too. Heck, I might even be able to figure out that one!
                            Last edited by Gary Beene; 6 Oct 2011, 03:33 PM.

                            Comment


                            • #15
                              Looking at the code in post #2 again bring to mind the question of where I can find the exposed methods of the control.

                              It would be too simple if it was like this:
                              Code:
                              oOCX.selectall
                              oOCX.copy
                              Now I'm getting an even better reason to work with objects. I'm guessing my PB COM browser will rescue me here? I'll go look!

                              Comment


                              • #16
                                Hi Gary,

                                If you insist in using code from the dark ages and ignore all the improvements made in the last eight years, be at least aware that the AtlMakeDispatch procedure, that I wrote in 2003, was intentionally wrong to workaround a bug in PB 7.0.

                                Two years later, I posted a correct version for compiler 8+. See post #6 i this thread: http://www.powerbasic.com/support/pb...tlMakeDispatch

                                Unforunately, nobody seems to read it and always copy the version of post #1.

                                To read the text, you need to geet a reference to the IHTMLDocument3 interface and then to the IHTMLElement interface (both in the MTHML component) and call the method innerText. Search for innetHTML in the forum to find some old code.

                                If you want to try a more modern approach, try this (don't click the "Get text" button until the page has been loaded):

                                Code:
                                #COMPILE EXE
                                #DIM ALL
                                %UNICODE = 1
                                
                                ' // Include files for external files
                                %USEWEBBROWSER = 1            ' // Use the WebBrowser control
                                #INCLUDE ONCE "CWindow.inc"   ' // CWindow class
                                
                                ' // Identifier
                                %IDC_WEBBROWSER = 101
                                
                                ' ########################################################################################
                                ' Main
                                ' ########################################################################################
                                FUNCTION WinMain (BYVAL hInstance AS DWORD, BYVAL hPrevInstance AS DWORD, BYVAL lpszCmdLine AS WSTRINGZ PTR, BYVAL nCmdShow AS LONG) AS LONG
                                
                                   ' // Set process DPI aware
                                '   SetProcessDPIAware
                                
                                   ' // Create an instance of the class
                                   LOCAL pWindow AS IWindow
                                   pWindow = CLASS "CWindow"
                                   IF ISNOTHING(pWindow) THEN EXIT FUNCTION
                                
                                   ' // Create the main window
                                   pWindow.CreateWindow(%NULL, "WebBrowser Template", 0, 0, 0, 0, 0, 0, CODEPTR(WindowProc))
                                   ' // Set the client siz
                                   pWindow.SetClientSize 600, 400
                                   ' // Center the window
                                   pWindow.CenterWindow
                                
                                   ' // Add a WebBrowser control
                                   LOCAL hCtl AS DWORD
                                   LOCAL bstrURL AS WSTRING
                                   bstrURL = "http://www.powerbasic.com/support/pbforums/"
                                   hCtl = pWindow.AddWebBrowserControl(pWindow.hwnd, %IDC_WEBBROWSER, bstrURL, NOTHING, 0, 0, pWindow.ClientWidth, pWindow.ClientHeight)
                                
                                   ' // Add a button
                                   pWindow.AddButton(pWindow.hwnd, %IDOK, "Get text", 0, 0, 0, 0)
                                
                                   ' // Default message pump (you can replace it with your own)
                                   pWindow.DoEvents(nCmdShow)
                                
                                END FUNCTION
                                ' ########################################################################################
                                
                                ' ========================================================================================
                                ' Main callback function.
                                ' ========================================================================================
                                FUNCTION WindowProc (BYVAL hwnd AS DWORD, BYVAL uMsg AS DWORD, BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
                                
                                   STATIC pWindow AS IWindow        ' // Reference to the IWindow interface
                                
                                   SELECT CASE uMsg
                                
                                      CASE %WM_CREATE
                                         ' // Get a reference to the IWindow interface from the CREATESTRUCT structure
                                         pWindow = CWindow_GetObjectFromCreateStruct(lParam)
                                         EXIT FUNCTION
                                
                                      CASE %WM_SYSCOMMAND
                                         ' // Capture this message and send a WM_CLOSE message
                                         ' // Note: Needed with some OCXs, that otherwise remain in memory
                                         IF (wParam AND &HFFF0) = %SC_CLOSE THEN
                                            SendMessage hwnd, %WM_CLOSE, 0, 0
                                            EXIT FUNCTION
                                         END IF
                                
                                      CASE %WM_COMMAND
                                         SELECT CASE LO(WORD, wParam)
                                            CASE %IDCANCEL
                                               ' // If the Escape key has been pressed...
                                               IF HI(WORD, wParam) = %BN_CLICKED THEN
                                                  ' // ... close the application by sending a WM_CLOSE message
                                                  SendMessage hwnd, %WM_CLOSE, 0, 0
                                                  EXIT FUNCTION
                                               END IF
                                
                                            CASE %IDOK  ' // Get the text
                                               LOCAL pWB AS IWebBrowser2
                                               pWB = OC_GetDispatch(GetDlgItem(hwnd, %IDC_WEBBROWSER))
                                               IF ISOBJECT(pWB) THEN
                                                  LOCAL pDoc AS IHTMLDocument3
                                                  pDoc = pWB.Document
                                                  IF ISOBJECT(pDoc) THEN
                                                     LOCAL pElement AS IHTMLElement
                                                     pElement = pDoc.documentElement
                                                     ? pElement.innerText
                                                  END IF
                                               END IF
                                
                                         END SELECT
                                
                                      CASE %WM_SIZE
                                         IF wParam <> %SIZE_MINIMIZED THEN
                                            ' // Resize the control
                                            pWindow.MoveWindow GetDlgItem(hwnd, %IDC_WEBBROWSER), 0, 0, pWindow.ClientWidth, pWindow.ClientHeight - 50, %TRUE
                                            pWindow.MoveWindow GetDlgItem(hwnd, %IDOK), pWindow.ClientWidth - 100, pWindow.ClientHeight - 35, 70, 23, %TRUE
                                         END IF
                                
                                      CASE %WM_DESTROY
                                         ' // End the application
                                         PostQuitMessage 0
                                         EXIT FUNCTION
                                
                                   END SELECT
                                
                                   ' // Pass unprocessed messages to Windows
                                   FUNCTION = DefWindowProc(hwnd, uMsg, wParam, lParam)
                                
                                END FUNCTION
                                ' ========================================================================================
                                BTW you can find several WebBrowser examples in my forum.
                                Last edited by José Roca; 6 Oct 2011, 09:52 PM.
                                Forum: http://www.jose.it-berater.org/smfforum/index.php

                                Comment


                                • #17
                                  Hi José,

                                  Originally posted by José Roca View Post
                                  Two years later, I posted a correct version for compiler 8+. See post #6 i this thread: http://www.powerbasic.com/support/pb...tlMakeDispatch

                                  Unforunately, nobody seems to read it and always copy the version of post #1.
                                  You wrote "I changed my password and I'm not longer allowed to edit my original post." in post #8.

                                  A suggestion: PM the forum admin and ask him to replace the code in #1 with the one in #8 so that this doesn't happen anymore.

                                  Comment


                                  • #18
                                    The first version is to be used with PB 7 only. The modified version can be used with 8+. With PB 9 and 10 it should be not used at all because much better options are available.

                                    I wrote it to allow the mix of Automation and low-level COM. It was the only way at that time, but since PB 9 and 10 have native direct interface calls, to continue using these now archaic workarounds is like throwing all the work done in the last 8 years to improve the compilers by the board.

                                    Anyway, it's not my business which code will be used by someone else, but I wanted to warn Gary that he was using the wrong version.
                                    Forum: http://www.jose.it-berater.org/smfforum/index.php

                                    Comment


                                    • #19
                                      Hi Jose!
                                      If you insist in using code from the dark ages and ignore all the improvements
                                      Personally, I prefer light bulbs over candles for illumination - so bring me on into the modern age!

                                      If I didn't comment on your other post, it was because my search never turned up the post! Thanks for the link.

                                      BTW, I just went looking for your newer post to see how I missed it. Searching for "Web Browser Example", your post wasn't included in the 20 page search results! I got the same result in a few other searches.

                                      In the post you gave me the link to, you were logged in as a "Guest". I wonder if that was affected my search?
                                      Unfortunately, nobody seems to read it and always copy the version of post #1
                                      Going to try out the newer version right now!

                                      Comment

                                      Working...
                                      X