我有一个在Xvnc(在Ubuntu上)屏幕(DISPLAY:1)上运行的java应用程序,我需要做的是,从一个应用程序(即正在运行的应用程序)启动另一个JFrame到主屏幕DISPLAY:0在显示中:1。
我考虑过使用 Runtime.getRuntime().exec(),但问题是,我需要从主应用程序控制第二个 JFrame 属性。
请帮助我如何实现这一目标。谢谢。我不需要跨平台解决方案,只需要 ubuntu。
更新:
我使用了代码
try{
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
for(int i = 0; i < gd.length; i++){
System.out.println(gd[i]);
}
} catch (Exception e){
e.printStackTrace();
}
我只得到一个显示器 X11GraphicsDevice[screen=0]
,这意味着 GraphicsDevice[] gd = ge.getScreenDevices();
只有 1 个设备。未检测到我的 XVNC X11 服务器 (DISPLAY:1)。
最佳答案
以下是如何将框架设置为显示
为类创建实例数据:
public class Graphic{
private GraphicsEnvironment graphicsEnviorment;
private DisplayMode dm, dm_old;
private JFrame frame1=new JFrame(), frame2 =new JFrame(); // we now have access to both jframes
public void makeScreen(){
graphicsEnviorment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] devices = graphicsEnviorment.getScreenDevices();
dm_old = devices[0].getDisplayMode(); // replace 0 with screen #
dm = dm_old;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
//place dead center on screen
int windowX = Math.max(0, (screenSize.width - frame.getWidth()) / 2);
int windowY = Math.max(0, (screenSize.height - frame.getHeight()) / 2);
frame1.setLocation(windowX, windowY);
frame1.setVisable(true);
// frame 2
dm_old = devices[0].getDisplayMode(); // replace 0 with screen #
dm = dm_old;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
//place dead center on screen
int windowX = Math.max(0, (screenSize.width - frame.getWidth()) / 2);
int windowY = Math.max(0, (screenSize.height - frame.getHeight()) / 2);
frame2.setLocation(windowX, windowY);
frame2.setVisable(true);
}
}
现在使用观察者平台(监听器)来处理两个帧之间的更改...
关于Java Jframe 向另一个 X Server 启动另一个 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840402/