Announcement

Collapse
No announcement yet.

Übertragung auf anderen Rechner

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

  • Übertragung auf anderen Rechner

    Hallo,

    ich habe ein Java-Programm, das auf meinem Rechner lauffähig ist, mitsamt der Entwicklungsumgebung auf einen anderen Rechner übertragen, und es stürzt ab, sobald ich Swing benutze. Kann das an dem Betriebssystem liegen ? Auf meinem Rechner ist es Windows NT, auf dem anderen Windows 2000 Professional. Oder gibt es sonst einen Grund, weshalb Swing auf bestimmten Rechnern nicht funktioniert ?

    Gruß Renate

  • #2
    Hallo Renate,<br>
    ich habe schon mehrfach Programme unter JDK1.2 und JDK1.3 mit<br>
    Swing von NT auf Windows 2000 übertragen und es gab nie Probleme.<br>
    Bekommst Du eine konkrete Fehlermeldung, z.B. Java Stack Trace?
    <p>
    Klau

    Comment


    • #3
      Hallo Klaus,

      eine konkrete Fehlermeldung kommt nicht, aber: Die Klasse JComponent enthält ja ein Feld namens "ui" vom Typ ComponentUI, und auf dem einen Rechner gelingt es nicht, diesem "ui" einen vernünftigen Wert zuzuweisen, es ist immer ui = null.

      Gruß Renat

      Comment


      • #4
        Ich habe jetzt den Fehler genauer eingegrenzt:
        Die Funktion MultiUIDefaults.get(Object key) in MultiUIDefaults.java liefert in einem Fall null, im anderen Fall {java.lang.String "com.sun.java.swing.plaf.basic.BasicToolBarUI" }
        Ich werde versuchen, noch Genaueres darüber herauszufinden, wie der Fehler entsteht.

        Gruß Renat

        Comment


        • #5
          Noch genauere Eingrenzung:
          in Datei MultiUDefaults.java:
          class MultiUIDefaults extends UIDefaults
          {
          private UIDefaults[] tables;

          public MultiUIDefaults(UIDefaults[] defaults) {
          super();
          tables = defaults;
          }

          public MultiUIDefaults() {
          super();
          tables = new UIDefaults[0];
          }

          public Object get(Object key)
          {
          Object value = super.get(key);
          if (value != null) {
          return value;
          }

          for(int i = 0; i < tables.length; i++) {
          UIDefaults table = tables[i];
          value = (table != null) ? table.get(key) : null;
          if (value != null) {
          return value;
          }
          }

          return null;
          }
          Auf dem einen Rechner ist tables[0] = {count=282, threshold=287, loadFactor=0.750000}, tables[1] = {count=1, threshold=2, loadFactor=0.750000}, auf dem anderem tables[0] = null und tables[1] = null;
          Weiterer Unterschied: Auf dem einen Rechner, auf dem es funktioniert, sind tables[0] und tables[1] public, auf dem anderen private.

          Wie es zu den unterschiedlichen Werten kommt, habe ich aber beim besten Willen nicht herausfinden können.

          Renat

          Comment


          • #6
            Hallo Renate,<br>das sieht aber schwer nach einem internen Sun Java Problem <br>
            aus. Hast Du schon mal versucht, in der Sun Java Bugparade dazu zu<br>
            recherchieren bzw. einen neuen Bug dazu aufzumachen?
            <p>
            Klau

            Comment


            • #7
              Hallo Klaus,
              es ist mir nicht gelungen, zur Bugparade zu kommen. Dazu muß ich mich ja registrieren lassen, und das klappte aus irgendeinem Grund nicht. Jetzt weiß ich dafür noch etwas genauer, wo das Problem entsteht.

              Es entsteht in der Funktion UIManager.setLookAndFeel bei "getLAFState().lookAndFeel =
              newLookAndFeel;
              In getLAFState() wird die Funktion SwingUtilities.appContextGet aufgerufen. Diese wiederum
              ruft die Funktion AppContext.getAppContext() auf, die ein Object vom Typ AppContext liefert.
              Dieser AppContext enthält security2appContexts {count=1, threshold=1, loadFactor=0.750000}
              vom Typ private static java.util.Hashtable, und im einen Fall ist table[1].hash = 89, und
              es funktioniert, im anderen Fall ist table[1].hash = -1235641559, und es funktioniert nicht In beiden Fällen ist table[0] = null. Auf noch einem anderen Rechner, auf dem es ebenfalls funktioniert, ist table[1] = null und table[0].hash = 14. Wie dieser Unterschied entsteht und warum er solche Auswirkungen hat, habe ich leider nicht herausfinden können

              Comment


              • #8
                Hallo Renate,<br>
                versuch mal:
                <pre><code>
                try {
                UIManager.setLookAndFeel(UIManager.getCrossPlatfor mLookAndFeelClassName());
                }
                catch (Exception e) {
                e.printStackTrace();
                }
                </pre></code>
                gleich zu Beginn Deines main().
                <p>
                Klau

                Comment


                • #9
                  Hallo Klaus,

                  ich habe es ausprobiert. Wieder dasselbe Ergebnis, aber keine Exception.

                  Renat

                  Comment


                  • #10
                    Sorry,<br>
                    aber dann weiss ich auch nicht weiter als es über Sun zu probieren. Ich habe bisher Swing von NT auf Windows 2000 und auf LINUX <br>
                    portiert und da gab es nie solche Probleme.<br>
                    Für die Bugparade brauchst Du nur eine einfache Registrierung <br>
                    in der Java Developer Connection mit username und password.<br>
                    Das ging bei mir problemlos. Solltest Du nochmal versuchen...
                    <p>
                    Gruss Klau

                    Comment

                    Working...
                    X