Does our webstart work for you?

It works on my G4 PPC test system but not on a Mac mini with Java 6


I see you have three threads named AWT-something plus the Java2D disposer. Are you doing Swing / AWT stuff in your app too? This is not supported on Mac OS X.

Two AWT classes are currently used in the program (java.awt.Rectangle and java.awt.image.BufferedImage) but removing them didnt solve the problem, they were not responsible for the crash though.

The best option is to modify the LauncherOSX.java file to make it work.

The LauncherOSX class first downloads and copies the .jar files into a temp folder and puts them in the classpath using some rather crude hacks, but it has proven to work in practice ;-). Do you have additional .jar files? If so these also need to go the same route.

After a while of pondering and trial&error I managed to understand how that one worked and change it accordingly. Strangely enough, it still crashed with the same error message.


...If you're using our qtjambi-macosx-gcc-4.4.0_01.jar file it should also be set up correctly.

I use that one.


We could fix a part of the problem by moving the "ui = new Ui_DmsMainWindow();" out of the constructor and putting it into the declaration part:


**********************Old:************************
public class MainWindow extends QMainWindow {

    .
    .
    .
    private PreviewGrid previewGrid_;
    private PreviewGrid previewSearchGrid_;
    private QScrollArea previewBrowseScrollArea_;
    private QScrollArea previewSearchScrollArea_;
    private final Ui_DmsMainWindow ui_;

    public MainWindow() {
        super();
        setWindowIcon(Icons.IDOKLOGO);
        defineMainWindowCornerBehaviour();

        ui_ = new Ui_DmsMainWindow();
        ui_.setupUi(this);

        QGridLayout layout = new QGridLayout(ui_.browsePreviewTab);
        previewBrowseScrollArea_ = new QScrollArea();
        layout.addWidget(previewBrowseScrollArea_);
        .
        .
        .
    }
    .
    .
    .
}
***********************************************


**************New:*****************************
public class MainWindow extends QMainWindow {

    .
    .
    .
    Ui_DmsMainWindow ui_ = new Ui_DmsMainWindow();
    private PreviewGrid previewGrid_;
    private PreviewGrid previewSearchGrid_;
    private QScrollArea previewBrowseScrollArea_;
    private QScrollArea previewSearchScrollArea_;
    // private final Ui_DmsMainWindow ui_;

    public MainWindow() {
        super();
        setWindowIcon(Icons.IDOKLOGO);
        defineMainWindowCornerBehaviour();

        // ui_ = new Ui_DmsMainWindow();
        ui_.setupUi(this);

        QGridLayout layout = new QGridLayout(ui_.browsePreviewTab);
        previewBrowseScrollArea_ = new QScrollArea();
        layout.addWidget(previewBrowseScrollArea_);
        .
        .
        .
    }
    .
    .
    .
}
****************************************


But not all problems could be solved by doing that...
We use a python script as jnlp file and when we use <application-desc main-class="ch.idok.qtgui.LauncherHallo"/> there is some output in the Java console and the GUI starts. but when using "<application-desc main-class="ch.idok.qtgui.LauncherOSX"/>" the whole thing crashes again creating pretty much the same error log as last time.
(both java files are attached to this mail)



For reference here is the relevant part of our jnlp file:

*****************************************
<jnlp codebase="http://%(host)s/" href="cgi-bin/qtgui.jnlp">

  <information>
    <title>iDok GUI application</title>
    <vendor>iDok opensource project</vendor>
    <homepage>http://www.idok.ch</homepage>
<description>Document management made easy: iDok Application based on Qt Jambi Technology</description> <description kind="short">iDok is made freely available under GPL v2</description>
  </information>

  <resources>
    <j2se version="1.5+"/>
    <jar href="/ant_dist/qtgui.jar"/>
    <jar href="/ant_dist/idok.jar"/>
    <jar href="/lib/svnkit.jar"/>
    <jar href="/lib/avalon-framework.jar"/>
    <jar href="/lib/jacorb.jar"/>
    <jar href="/lib/logkit.jar"/>
    <jar href="/lib/qtjambi.jar"/>
    <jar href="/lib/PDFRenderer.jar"/>
    <property name="org.omg.CORBA.ORBClass" value="org.jacorb.orb.ORB"/>
<property name="org.omg.CORBA.ORBSingletonClass" value="org.jacorb.orb.ORBSingleton"/> <property name="org.omg.PortableInterceptor.ORBInitializerClass.bidir_init" value="org.jacorb.orb.giop.BiDirConnectionInitializer"/> <property name="ORBInitRef.NameService" value="corbaloc::%(host)s:1050/NameService"/> <property name="ch.idok.service.client.provider" value="ch.idok.service.client.corba.ClientProvider"/> <property name="ch.idok.service.common.keypass" value="P7GXtm6rPr5pT988N4Gm"/>
    <property name="com.trolltech.launcher.webstart" value="true"/>
    <property name="com.trolltech.qt.internal.jambipath" value=""/>
    <property name="com.trolltech.qt.implicit-loading" value="false"/>
    <property name="com.trolltech.qt.load-from-cache" value="true"/>
  </resources>

  <resources os="Windows" arch="x86">
    <j2se version="1.5+"/>
    <nativelib href="/lib/qtjambi-win32-gpl.jar"/>
    <jar href="/lib/qtjambi-win32-gpl.jar"/>
<property name="com.trolltech.qt.pluginjars" value="qtjambi-win32-gpl.jar"/>
  </resources>

  <resources os="Linux" arch="i386">
    <j2se version="1.5+"/>
    <nativelib href="/lib/qtjambi-linux32-gpl.jar"/>
    <jar href="/lib/qtjambi-linux32-gpl.jar"/>
<property name="com.trolltech.qt.pluginjars" value="qtjambi-linux32-gpl.jar"/>
  </resources>

  <resources os="Mac OS X">
    <j2se version="1.5+" java-vm-args="-XstartOnFirstThread" />
    <nativelib href="/lib/qtjambi-mac-gpl.jar"/>
    <jar href="/lib/qtjambi-mac-gpl.jar"/>
<property name="com.trolltech.qt.pluginjars" value="qtjambi-mac-gpl.jar"/>
  </resources>

  <application-desc main-class="ch.idok.qtgui.LauncherOSX"/>

  <security>
    <all-permissions/>
  </security>

</jnlp>
**********************************************


While having one working and one crashing jnlp file that is nearly exactly the same is somewhat peculiar, the real problem are the corba VM parameters that had to be commented out in the launcher java files for it to work. They enable some important features but even manage to crash a simple "Hello World" Jambi application.
Could that be a problem with JacORB and Mac OSX + Jambi?


best regards
Florian
/****************************************************************************
**
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
**
** This file is part of Qt Jambi.
**
** ** This file may be used under the terms of the GNU General Public
** License version 2.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file.  Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
** http://www.trolltech.com/products/qt/opensource.html
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://www.trolltech.com/products/qt/licensing.html or contact the
** sales department at [EMAIL PROTECTED]

**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/

package ch.idok.qtgui;

import com.trolltech.qt.*;

import java.io.*;
import java.net.*;

public class LauncherHallo {

    // private static final String JAVA_PATH_MACOSX = "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Commands/java";
    //private static final String PLUGINS_JAR_MACOSX = "qtjambi-mac-gpl-" + Utilities.VERSION_STRING + ".jar";

    private  static void copy(URL sourceUrl, String destination) throws IOException {
        System.out.println("using source: " + sourceUrl);

        URLConnection connection = sourceUrl.openConnection();
        if (connection instanceof JarURLConnection)
            sourceUrl = ((JarURLConnection) connection).getJarFileURL();
        else
            throw new IllegalArgumentException("bad input url...: " + sourceUrl);

        copy(sourceUrl.openStream(), new FileOutputStream(destination));
    }

    private static void copy(InputStream in, OutputStream out) throws IOException {
        byte buffer[] = new byte[1024 * 64];
        while (in.available() > 0) {
            int read = in.read(buffer);
            out.write(buffer, 0, read);
        }
        in.close();
        out.close();
    }

    public static void main(String args[]) throws Exception {


        String tmp = Utilities.jambiTempDir().getAbsolutePath();
        new File(tmp).mkdirs();        
        copy(Thread.currentThread().getContextClassLoader().getResource("ch/idok/qtgui/DmsGui.class"),
                tmp + "/qtgui.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("ch/idok/common/client/ClientHandler.class"),
                tmp + "/idok.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("com/trolltech/qt/QtJambiObject.class"),
                tmp + "/qtjambi.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/tmatesoft/svn/core/SVNURL.class"),
                tmp + "/svnkit.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/apache/avalon/framework/logger/LogKit2AvalonLoggerAdapter.class"),
                tmp + "/avalon-framework.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/jacorb/orb/ORB.class"),
                tmp + "/jacorb.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/apache/log/LogKit.class"),
                tmp + "/logkit.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("com/sun/pdfview/PDFViewer.class"),
                tmp + "/PDFRenderer.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("lib/libQtCore.4.dylib"),
                tmp + "/qtjambi-mac-gpl.jar");

        StringBuffer cmd = new StringBuffer();

        String javaLocation = System.getProperty("java.home") + "/bin/";
        cmd.append(javaLocation + "java");

        // classpath...
        cmd.append(" -cp " + tmp + "/qtgui.jar:" + tmp + "/idok.jar:" + tmp + "/qtjambi.jar:" + tmp + "/svnkit.jar:" + tmp + "/avalon-framework.jar" + tmp + "/jacorb.jar:" + tmp + "/logkit.jar:" + tmp + "/PDFRenderer.jar:"  + tmp + "/qtjambi-mac-gpl.jar");
        
//        cmd.append(" -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB ");
//        cmd.append(" -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton ");
//        cmd.append(" -DORBInitRef.NameService=corbaloc::dms02.psi.ch:1050/NameService ");
//        cmd.append(" -Dorg.omg.PortableInterceptor.ORBInitializerClass.bidir_init=org.jacorb.orb.giop.BiDirConnectionInitializer ");
//        cmd.append(" -Dch.idok.service.server.principal=HTTP/[EMAIL PROTECTED] ");
//        cmd.append(" -Dch.idok.service.client.provider=ch.idok.service.client.corba.ClientProvider "); 
//        cmd.append(" -Dch.idok.service.common.keypass=P7GXtm6rPr5pT988N4Gm ");
        cmd.append(" -Dcom.trolltech.qt.internal.jambipath=");
        cmd.append(" -Dcom.trolltech.qt.implicit-loading=false");
        cmd.append(" -Dcom.trolltech.qt.load-from-cache=true");
        
        cmd.append(" -XstartOnFirstThread");
        cmd.append(" -Dcom.trolltech.launcher.webstart=true");

        // the app itself...
        cmd.append(" ch.idok.qtgui.DmsGui");

        System.out.println(cmd.toString());

        ProcessBuilder procBuilder = new ProcessBuilder(cmd.toString().split(" "));
        System.out.println("x1");
        Process proc = procBuilder.start();
        System.out.println("x2");
        proc.waitFor();
        System.out.println("x3");
    }
}
/****************************************************************************
**
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
**
** This file is part of Qt Jambi.
**
** ** This file may be used under the terms of the GNU General Public
** License version 2.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of
** this file.  Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
** http://www.trolltech.com/products/qt/opensource.html
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://www.trolltech.com/products/qt/licensing.html or contact the
** sales department at [EMAIL PROTECTED]

**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/

package ch.idok.qtgui;

import com.trolltech.qt.*;

import java.io.*;
import java.net.*;

public class LauncherOSX {

    // private static final String JAVA_PATH_MACOSX = "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Commands/java";
    //private static final String PLUGINS_JAR_MACOSX = "qtjambi-mac-gpl-" + Utilities.VERSION_STRING + ".jar";

    private  static void copy(URL sourceUrl, String destination) throws IOException {
        System.out.println("using source: " + sourceUrl);

        URLConnection connection = sourceUrl.openConnection();
        if (connection instanceof JarURLConnection)
            sourceUrl = ((JarURLConnection) connection).getJarFileURL();
        else
            throw new IllegalArgumentException("bad input url...: " + sourceUrl);

        copy(sourceUrl.openStream(), new FileOutputStream(destination));
    }

    private static void copy(InputStream in, OutputStream out) throws IOException {
        byte buffer[] = new byte[1024 * 64];
        while (in.available() > 0) {
            int read = in.read(buffer);
            out.write(buffer, 0, read);
        }
        in.close();
        out.close();
    }

    public static void main(String args[]) throws Exception {

        if (System.getProperty("os.name").toLowerCase().contains("mac os x")) {
            DmsGui.main(args);
            return;
        }

        String tmp = Utilities.jambiTempDir().getAbsolutePath();
        new File(tmp).mkdirs();        
        copy(Thread.currentThread().getContextClassLoader().getResource("ch/idok/qtgui/DmsGui.class"),
                tmp + "/qtgui.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("ch/idok/common/client/ClientHandler.class"),
                tmp + "/idok.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/tmatesoft/svn/core/SVNURL.class"),
                tmp + "/svnkit.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/apache/avalon/framework/logger/LogKit2AvalonLoggerAdapter.class"),
                tmp + "/avalon-framework.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/jacorb/orb/ORB.class"),
                tmp + "/jacorb.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("org/apache/log/LogKit.class"),
                tmp + "/logkit.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("com/trolltech/qt/QtJambiObject.class"),
                tmp + "/qtjambi.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("com/sun/pdfview/PDFViewer.class"),
                tmp + "/PDFRenderer.jar");
        copy(Thread.currentThread().getContextClassLoader().getResource("lib/libQtCore.4.dylib"),
                tmp + "/qtjambi-mac-gpl.jar");


        StringBuffer cmd = new StringBuffer();

        String javaLocation = System.getProperty("java.home") + "/bin/";
        cmd.append(javaLocation + "java");

        // classpath...
        cmd.append(" -cp " + tmp + "/qtgui.jar:"  + tmp + "/idok.jar:" + tmp + "/svnkit.jar:" + tmp + "/avalon-framework.jar" + tmp + "/jacorb.jar:" + tmp + "/logkit.jar:" + tmp + "/qtjambi.jar:" + tmp + "/PDFRenderer.jar:" + tmp + "/qtjambi-mac-gpl.jar");

//        cmd.append(" -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB ");
//        cmd.append(" -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton ");
//        cmd.append(" -DORBInitRef.NameService=corbaloc::dms02.psi.ch:1050/NameService ");
//        cmd.append(" -Dorg.omg.PortableInterceptor.ORBInitializerClass.bidir_init=org.jacorb.orb.giop.BiDirConnectionInitializer ");
//        cmd.append(" -Dch.idok.service.server.principal=HTTP/[EMAIL PROTECTED] ");
//        cmd.append(" -Dch.idok.service.client.provider=ch.idok.service.client.corba.ClientProvider "); 
//        cmd.append(" -Dch.idok.service.common.keypass=P7GXtm6rPr5pT988N4Gm ");
        cmd.append(" -Dcom.trolltech.qt.internal.jambipath=");
        cmd.append(" -Dcom.trolltech.qt.implicit-loading=false");
        cmd.append(" -Dcom.trolltech.qt.load-from-cache=true");

//        cmd.append(" -Xms1024m -Xmx1024m -Xss512K -Xoss512K");
        
        cmd.append(" -XstartOnFirstThread");
        cmd.append(" -Dcom.trolltech.launcher.webstart=true");

        // the app itself...
        cmd.append(" ch.idok.qtgui.DmsGui");

        System.out.println(cmd.toString());

        ProcessBuilder procBuilder = new ProcessBuilder(cmd.toString().split(" "));
        System.out.println("x1");
        Process proc = procBuilder.start();
        System.out.println("x2");
        proc.waitFor();
        System.out.println("x3");
    }
}
_______________________________________________
Qt-jambi-interest mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-jambi-interest

Reply via email to