eclipse equinox Endlosschleife damit JFrame geöffnet bleibt IApplication

Dennis123

Grünschnabel
Hallo


gibt es eine andere Möglichkeit wie eine Endlosschleife damit ein JFrame in einer eigenen equinox Applikation geöffnet belibt?

Code:
public class InventoryStarter implements IApplication {

	@Override
	public Object start(IApplicationContext context) throws Exception {
		final JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
		while (frame.isVisible()) {

		}
		return EXIT_OK;
	}

	@Override
	public void stop() {
		System.out.println("stop");
	}

}


Gruß

Dennis
 
Hallo,

was ich gerade nicht so ganz verstehe, warum erbt deine Klasse von IApplication? Bei einer Equinox oder OSGI Anwendung erbt die Klasse normal von BundleActivator.

Nur wenn du eine EclipseRCP-Anwendung schreibst, erbt der Activator von IApplication. Dann verstehe ich aber nicht was du mit einem JFrame möchtest.

Gruß

Sascha
 
ja richtig. Ich habe mir eine Eclipse Product Configuration Datei erstellt. Damit wollte ich mein Anwendung als Eclipse Application starten um dadurch später durch einen Klick auf die Export Funktion meine Applikation von Eclipse komplett zusammenbauen zu lassen.
 
Es bringt dir aber eigentlich keinen Vorteil es so zumachen. Zumindest fällt mir jetzt keiner ein. Du kannst nämlich die ganzen Vorteile die es dir bringt, nicht nutzen, da du Swing nutzen möchtest und nicht das Eclipse-Framework.

Anders wäre es eigentlich genau so einfach, da du deine Application einfach als Jar exportieren kannst.

Gruß

Sascha
 
Hallo,

Es bringt dir aber eigentlich keinen Vorteil es so zumachen. Zumindest fällt mir jetzt keiner ein. Du kannst nämlich die ganzen Vorteile die es dir bringt, nicht nutzen, da du Swing nutzen möchtest und nicht das Eclipse-Framework.

Der Vorteil ist hier, dass man auch ohne die Verwendung von Eclipse-UI Features wie SWT / JFace, Platform UI etc.
solche Mechanismen wie Plugin / Extension Mechanismus, Job- /Update- /Help-System der Eclipse Platform nutzen kann.


schau mal hier:
Java:
package de.tutorials.osgi.swing.app;

import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;

import de.tutorials.osgi.swing.app.ui.MainFrame;

/**
 * This class controls all aspects of the application's execution
 */
public class Application implements IApplication {

	public Object start(IApplicationContext context) throws Exception {
		System.out.println("start");
		
		MainFrame mainFrame = new MainFrame();
		mainFrame.waitForClose();
		
		return IApplication.EXIT_OK;
	}

	public void stop() {
		System.out.println("stop");
	}

}

Java:
package de.tutorials.osgi.swing.app.ui;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import javax.swing.JFrame;

public class MainFrame extends JFrame {

	Lock lock = new ReentrantLock();
	Condition shouldExit = lock.newCondition();

	public void waitForClose() {
		try {
			lock.lock();
			shouldExit.awaitUninterruptibly();
		} finally {
			lock.unlock();
		}
	}

	public MainFrame() {
		super("MainFrame");
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setSize(400, 300);

		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosed(WindowEvent e) {
				try {
					lock.lock();
					shouldExit.signal();
				} finally {
					lock.unlock();
				}
			}
		});

		setVisible(true);

	}

}

Ansonsten könntest du deine Swing basierten Oberflächen auch mit der SWT / Swing Integration in Eclipse RCP Anwendungen nutzen.

http://www.eclipsezone.com/eclipse/forums/t45697.html

Gruß Tom
 
Zurück