Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Pro ENGINEER
  Jlink Swing-Fenster

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo
Autor Thema:  Jlink Swing-Fenster (762 mal gelesen)
fly
Mitglied
Leitender Angestellter


Sehen Sie sich das Profil von fly an!   Senden Sie eine Private Message an fly  Schreiben Sie einen Gästebucheintrag für fly

Beiträge: 176
Registriert: 02.08.2004

WF3 M230
Windchill 9.1
FCS R630
WinXP SP3

erstellt am: 31. Jul. 2007 23:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich hoffe mir kann jemand helfen:
Ich möchte mittels Jlink ein neues Fenster (Swing) erstellen. In dem Fenster befindet sich 1 Button der mir 2 Parameter ans Pro-E übergeben soll (Model_Type, Model_Name)! Er bleibt aber in dem Java-Fenster stehen und rührt sich nicht mehr!
Hier mein Code:
public void new_window() [wird von einem Menü aufgerufen]
  {
    JFrame win = new JFrame();
    win.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    win.setSize( 600, 100 );
    win.setTitle("Neues Model");
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    win.setLocation( (d.width  - win.getSize().width ) / 2,
                (d.height - win.getSize().height) / 2 );
   
   
    JLabel text_1 = new JLabel( "Create New " );
    JLabel text_2 = new JLabel (" Name:");
    JTextField doc_number = new JTextField("12345678901", 8);
    final JTextField model_name = new JTextField (10);
   
    final JComboBox model_type = new JComboBox();
    model_type.addItem( "PRT" );
    model_type.addItem( "ASM" );
    model_type.addItem( "DRW" );
   
    JComboBox model_indicator = new JComboBox();
    model_indicator.addItem( "_-_" );
    model_indicator.addItem( "_b_" );
    model_indicator.addItem( "_n_" );
   
   
    JButton neu = new JButton ("Neu");


    Container con = win.getContentPane();
    win.setLayout( new FlowLayout() );
    con.add (text_1);
    con.add (model_type);
    con.add (text_2);
    con.add (doc_number);
    con.add (model_indicator );
    con.add (model_name);
    con.add (neu);
    win.setVisible( true );
   
    ActionListener al = new ActionListener()
    {
    public void actionPerformed( ActionEvent e )
      {
    System.exit( 0 );
        new_model(model_type.getToolTipText (),model_name.getText());
       
      }
    };
      neu.addActionListener (al);
  }


  public Model new_model(/* String type , String model_name */)
  {
  Session session;
  String model_std_path;
  String model_std_name;
  Model cur_model;
  ModelType model_type;
  ModelDescriptor descr;
 
  String model_name;
  model_name = "test-1";

    try {  session = pfcGlobal.GetProESession (); }
     
    catch(jxthrowable x) {
      System.out.println("Nicht mit Proe Verbunden");
      return (null);
    }

/*  if (type == "prt")
  { */
  model_type = ModelType.MDL_ASSEMBLY;
  model_std_name = "_template_vie.prt";
  model_std_path = "S:\templates_wf20";
 

  try {
          descr = pfcModel.ModelDescriptor_Create ( model_type, model_std_name, null);
          descr.SetPath (model_std_path);
        cur_model = session.RetrieveModel(descr);
      return cur_model.CopyAndRetrieve (model_name, null);
     
      }
 
  catch (jxthrowable x) {
          System.out.println ("Error in Creating new Part"+x);
          return (null);
        }
  /*
  else return (null); */

  }

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JLinker
Mitglied
CAD Administrator / Konstrukteur


Sehen Sie sich das Profil von JLinker an!   Senden Sie eine Private Message an JLinker  Schreiben Sie einen Gästebucheintrag für JLinker

Beiträge: 36
Registriert: 10.03.2007

ProE Wildfire 2.0 M270 /3.0 M090
Intralink 3.4 M040
PDMLink 9.0 F000<P>HP xw4400
NVIDIA QuadroFX 1500
NVIDIA Treiber 84.80
WinXP SP2

erstellt am: 01. Aug. 2007 07:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fly 10 Unities + Antwort hilfreich

Hallo,

ich denke dein Problem beginnt schon in den ersten Zeilen.

Zitat:

JFrame win = new JFrame();
win.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

JFrames werden von JLink nicht wirklich unterstützt (zumindest nicht für Interaktionen mit ProE). In der Dokumentation steht, dass man modale JDialogs verwenden muss. Diese Jdialogs sperren alle ProE Aktionen wenn sie Angezeigt werden. Die DefaultCloseoperation solltest du auch nicht so verwenden, stattdessen den Standard lassen. Bei JDialogs arbeitet man nur mit den Methoden setVisible und dispose.

Zitat:

ActionListener al = new ActionListener()
    {
    public void actionPerformed( ActionEvent e )
      {
    System.exit( 0 );
        new_model(model_type.getToolTipText (),model_name.getText());
       
      }
    };



In der ActionListener hast du die Zeile System.exit(0). Wenn dein Button funktioniert hätte, hättest du aus Anwendersicht einen Absturz produziert, weil du mit diesem Aufruf nicht nur deinen JFRame sondern auch ProE beendest. Deshalb muss man mit setVisible und dispose arbeiten.

Der nächste Punkt ist, dass du die System.exit(0) Methode vor der Methode new_model aufgerufen wird. Damit wird das Programm beendet und deine Methode wird überhaupt nicht aufgerufen.

Als Vorschlag von mir, könntest du am Anfang der Methode noch eine Ausgabe einfügen, damit du siehst ob die Methode aufgrufen wird. Es währe auch sinnvoll eine eigene Log Datei zu schreiben, da die Ausgaben auf System.out nicht wirklich hilfreich sind.


Gruß,
Günther

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

COMPUTERSPACE
Mitglied
Sysadmin und Anwender


Sehen Sie sich das Profil von COMPUTERSPACE an!   Senden Sie eine Private Message an COMPUTERSPACE  Schreiben Sie einen Gästebucheintrag für COMPUTERSPACE

Beiträge: 1149
Registriert: 06.01.2005

Dell M90, T2400, 4Gb, FX 2500M, W7 32bit, WF5/M65/Produktiv
MS Server 2008 64bit + INTRALINK 9.1 M040

erstellt am: 01. Aug. 2007 12:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fly 10 Unities + Antwort hilfreich

Hallo fly,
vielleicht dürfte es auch helfen generell bei der Entwicklung mit dem switch -g zu kompilieren, um Fehlermeldungen besser abfangen zu können.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fly
Mitglied
Leitender Angestellter


Sehen Sie sich das Profil von fly an!   Senden Sie eine Private Message an fly  Schreiben Sie einen Gästebucheintrag für fly

Beiträge: 176
Registriert: 02.08.2004

WF3 M230
Windchill 9.1
FCS R630
WinXP SP3

erstellt am: 01. Aug. 2007 14:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@COMPUTERSPACE: Arbeite mit Eclipse -> Fehlermeldungen die Java betreffen werden live angezeigt
-g Compelieren hilft auch nichts da ja nur Java eigene Fehlermeldungen ausgegeben werden (Obs jetzt im Proe funktioniert oder nicht kann er ja gar nicht prüfen)
Zitat:
Als Vorschlag von mir, könntest du am Anfang der Methode noch eine Ausgabe einfügen, damit du siehst ob die Methode aufgrufen wird. Es währe auch sinnvoll eine eigene Log Datei zu schreiben, da die Ausgaben auf System.out nicht wirklich hilfreich sind.

Gibt es keine andere möglichkeit die Anwendung zu debuggen (z.B. Variablen Überwachung,...)?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JLinker
Mitglied
CAD Administrator / Konstrukteur


Sehen Sie sich das Profil von JLinker an!   Senden Sie eine Private Message an JLinker  Schreiben Sie einen Gästebucheintrag für JLinker

Beiträge: 36
Registriert: 10.03.2007

ProE Wildfire 2.0 M270 /3.0 M090
Intralink 3.4 M040
PDMLink 9.0 F000<P>HP xw4400
NVIDIA QuadroFX 1500
NVIDIA Treiber 84.80
WinXP SP2

erstellt am: 01. Aug. 2007 15:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fly 10 Unities + Antwort hilfreich

Es gibt schon eine Möglichkeit. Du baust dein Programm so auf, dass es als synchrones und asynchrones Programm läuft. Zum Debuggen startest du dann die asynchrone Applikation von Eclipse aus.
Eine ordentliche Log-Datei ist aber trotzdem kein Fehler, da man unter umständen Laufzeitfehler von Usern besser lokalisieren kann.


Gruß,
Günther

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fly
Mitglied
Leitender Angestellter


Sehen Sie sich das Profil von fly an!   Senden Sie eine Private Message an fly  Schreiben Sie einen Gästebucheintrag für fly

Beiträge: 176
Registriert: 02.08.2004

WF3 M230
Windchill 9.1
FCS R630
WinXP SP3

erstellt am: 01. Aug. 2007 18:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Es gibt schon eine Möglichkeit. Du baust dein Programm so auf, dass es als synchrones und asynchrones Programm läuft. Zum Debuggen startest du dann die asynchrone Applikation von Eclipse aus.

Danke für den Hinweis! 10 U's

Zitat:
Eine ordentliche Log-Datei ist aber trotzdem kein Fehler, da man unter umständen Laufzeitfehler von Usern besser lokalisieren kann.

Dass ist sicherlich richtig und wichtig! Aber 1. habe ich (noch) keine Idee wie dass zu realisieren (programmieren) ist 2. glaube ich dass es während der neuerstellung ziemlich aufwändig ist?!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fly
Mitglied
Leitender Angestellter


Sehen Sie sich das Profil von fly an!   Senden Sie eine Private Message an fly  Schreiben Sie einen Gästebucheintrag für fly

Beiträge: 176
Registriert: 02.08.2004

WF3 M230
Windchill 9.1
FCS R630
WinXP SP3

erstellt am: 02. Aug. 2007 00:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@JLinker zu JDialogs Ich brauche ja für einen JDialog ein Parent-Objekt (das Pro-e Fenster). Er lässt das aber nicht zu:

Window win = session.GetCurrentWindow();
JDialog dialog = new JDialog(win, false);

Was mache ich falsch?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JLinker
Mitglied
CAD Administrator / Konstrukteur


Sehen Sie sich das Profil von JLinker an!   Senden Sie eine Private Message an JLinker  Schreiben Sie einen Gästebucheintrag für JLinker

Beiträge: 36
Registriert: 10.03.2007

ProE Wildfire 2.0 M270 /3.0 M090
Intralink 3.4 M040
PDMLink 9.0 F000<P>HP xw4400
NVIDIA QuadroFX 1500
NVIDIA Treiber 84.80
WinXP SP2

erstellt am: 02. Aug. 2007 06:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fly 10 Unities + Antwort hilfreich

Das JDialog Objekt muss so erzeugen werden:

Code:

JDialog d = new JDialog(new JFrame(), true);

Das "true" ist besonders wichtig, da dadurch ein modaler Dialog erzeugt wird.


Gruß,
Günther

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz