Grüße,
ich habe folgendes Problem mit einem Programm das eine 3D Umgebung in den FSEM (Full Screen Exclusive Mode) einbinden will. Der Bildschirm geht auf Fullscreen bleibt aber schwarz und zeigt nicht den sich drehenden bunten Würfel an. Nur wenn ich das Programm auf der Taskleiste ablege (Alt + Tab) zeigt sich der Würfel kurz. Der Würfel ist auch kurz zu sehen nachdem ich das Programm wieder maximiert habe.
Starte ich das Programm nicht im FSEM sondern in einem Frame der bspw. 500x500px groß ist wird der Würfel korrekt dargestellt. Nach unzähligen Versuchen gelang mir nun schließlich der Durchbruch. Ich legte den Befehl in den FSEM zu wechseln auf Tastendruck 'q'.
Nach Programmstart rotiert der Würfel nun in einem Frame der 500x500px groß ist und wenn ich 'q' drücke wechselt er in den FSEM und der Würfel dreht sich. Problem gelöst. Aber wieso? Kann mir jeman weiterhelfen? Ich dachte zuerst das eventuell ein Problem mit dem Fokus vorliegen könnte aber ich bin mir nicht sicher.
Im Moment ist es nun so das ich das Programm nicht mehr auf der Taskleiste ablegen kann. Wenn ich Alt+Tab drücke erscheint nur die Windowsleiste aber keine andere Anwendung kann sich vor meinen Frame schieben. Das ist etwas ungewöhnlich und wahrscheinlich auch der Grund wieso es nun funktioniert.
Hier mal mein Quellcode:
Vielen Dank für jeden Hinweis!
ich habe folgendes Problem mit einem Programm das eine 3D Umgebung in den FSEM (Full Screen Exclusive Mode) einbinden will. Der Bildschirm geht auf Fullscreen bleibt aber schwarz und zeigt nicht den sich drehenden bunten Würfel an. Nur wenn ich das Programm auf der Taskleiste ablege (Alt + Tab) zeigt sich der Würfel kurz. Der Würfel ist auch kurz zu sehen nachdem ich das Programm wieder maximiert habe.
Starte ich das Programm nicht im FSEM sondern in einem Frame der bspw. 500x500px groß ist wird der Würfel korrekt dargestellt. Nach unzähligen Versuchen gelang mir nun schließlich der Durchbruch. Ich legte den Befehl in den FSEM zu wechseln auf Tastendruck 'q'.
Nach Programmstart rotiert der Würfel nun in einem Frame der 500x500px groß ist und wenn ich 'q' drücke wechselt er in den FSEM und der Würfel dreht sich. Problem gelöst. Aber wieso? Kann mir jeman weiterhelfen? Ich dachte zuerst das eventuell ein Problem mit dem Fokus vorliegen könnte aber ich bin mir nicht sicher.
Im Moment ist es nun so das ich das Programm nicht mehr auf der Taskleiste ablegen kann. Wenn ich Alt+Tab drücke erscheint nur die Windowsleiste aber keine andere Anwendung kann sich vor meinen Frame schieben. Das ist etwas ungewöhnlich und wahrscheinlich auch der Grund wieso es nun funktioniert.
Hier mal mein Quellcode:
Java:
import java.awt.* ;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.media.j3d.* ;
import javax.vecmath.* ;
import com.sun.j3d.utils.geometry.ColorCube ;
import com.sun.j3d.utils.universe.* ;
public class ExclusiveModeTest implements KeyListener
{
static GraphicsDevice device ;
static GraphicsEnvironment env ;
static GraphicsConfiguration config ;
static DisplayMode Modus;
static Frame Full;
static Canvas3D C3D;
static SimpleUniverse Uni;
public static void main(String[] args)
{
env = GraphicsEnvironment.getLocalGraphicsEnvironment() ;
device = env.getDefaultScreenDevice() ;
config = SimpleUniverse.getPreferredConfiguration() ;
Modus = device.getDisplayMode();
Full = new Frame(null, config) ;
Full.setUndecorated(true) ;
Full.setResizable(false);
C3D = new Canvas3D(config) ;
Full.add(C3D) ;
Full.addKeyListener(new ExclusiveModeTest());
C3D.addKeyListener(new ExclusiveModeTest());
Uni = new SimpleUniverse(C3D) ;
Uni.getViewingPlatform().setNominalViewingTransform() ;
Full.setSize(500,500);
Full.setVisible(true);
BranchGroup scene = createSceneGraph() ;
Uni.addBranchGraph(scene) ;
}
static BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup() ;
// Create the TransformGroup node and initialize it to the
// identity. Enable the TRANSFORM_WRITE capability so that
// our behavior code can modify it at run time. Add it to
// the root of the subgraph.
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objRoot.addChild(objTrans) ;
// Create a simple Shape3D node; add it to the scene graph.
objTrans.addChild(new ColorCube(0.4)) ;
// Create a new Behavior object that will perform the
// desired operation on the specified transform and add
// it into the scene graph.
Transform3D yAxis = new Transform3D() ;
Alpha rotationAlpha = new Alpha(-1, 4000) ;
RotationInterpolator rotator =
new RotationInterpolator(rotationAlpha, objTrans, yAxis,
0.0f, (float) Math.PI*2.0f) ;
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
rotator.setSchedulingBounds(bounds);
objRoot.addChild(rotator) ;
// Have Java 3D perform optimizations on this scene graph.
objRoot.compile() ;
return objRoot ;
}
public void keyPressed(final KeyEvent event)
{
}
public void keyReleased(final KeyEvent event)
{
if (event.getKeyChar() == 'q')
{
device.setFullScreenWindow(Full) ;
device.setDisplayMode(new DisplayMode(Modus.getWidth(),Modus.getHeight(),Modus.getBitDepth(),Modus.getRefreshRate()));
}
}
public void keyTyped(final KeyEvent event)
{
}
}
Vielen Dank für jeden Hinweis!
Zuletzt bearbeitet: