我试图在JavaFX项目中使用未装饰的阶段,stage.init风格(StageStyle. UNDECORATED);
。这是一个模块化的Gradle项目。它也是一个多项目构建,尽管因为我正在IntelliJ中处理它,所以将其称为多模块构建可能更合适。
我希望能够为这个未装饰的阶段添加常规功能。我已经能够添加常用的最小化、还原和关闭按钮,但如果用户单击Windows任务栏中的程序图标,我希望它也能最小化和还原。
我在这个较旧的StackOverflow帖子中找到了可能执行此操作的代码,但我遇到了一个我无法完全弄清楚的错误。
brian(海报)代码:
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinUser;
import static com.sun.jna.platform.win32.WinUser.GWL_STYLE;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class JNATest extends Application {
public static void main(String[] args) { launch(args); }
@Override
public void start(Stage stage) {
TextArea ta = new TextArea("output\n");
VBox root = new VBox(5,ta);
Scene scene = new Scene(root,800,200);
stage.setTitle("Find this window");
stage.setScene(scene);
stage.show();
//gets this window (stage)
long lhwnd = com.sun.glass.ui.Window.getWindows().get(0).getNativeWindow();
Pointer lpVoid = new Pointer(lhwnd);
//gets the foreground (focused) window
final User32 user32 = User32.INSTANCE;
char[] windowText = new char[512];
HWND hwnd = user32.GetForegroundWindow();
//see what the title is
user32.GetWindowText(hwnd, windowText, 512);
//user32.GetWindowText(new HWND(lpVoid), windowText, 512);//to use the hwnd from stage
String text=(Native.toString(windowText));
//see if it's the same pointer
ta.appendText("HWND java:" + lpVoid + " HWND user32:"+hwnd+" text:"+text+"\n");
//change the window style if it's the right title
if (text.equals(stage.getTitle())){
//the style to change
int WS_DLGFRAME = 0x00400000;//s/b long I think
//not the same constant here??
ta.appendText("windows api:"+WS_DLGFRAME+" JNA: "+WinUser.SM_CXDLGFRAME);
int oldStyle = user32.GetWindowLong(hwnd, GWL_STYLE);
int newStyle = oldStyle & ~0x00400000; //bitwise not WS_DLGFRAME means remove the style
newStyle = newStyle & ~0x00040000;//WS_THICKFRAME
user32.SetWindowLong(hwnd, GWL_STYLE, newStyle);
}
}
}
导致我出错的部分是com。太阳玻璃用户界面。窗getWindows()。获取(0)。getNativeWindow()
错误是:
package com.sun.glass.ui is not visible
(package com.sun.glass.ui is declared in module javafx.graphics, which does not export it to module apple.orange.main)
我真的不太明白这个错误。sun.glass.ui包是在javafx.graphics声明的,因为我试图在代码中使用它,还是它驻留在javafx.graphics模块中,但无法访问?我最好的猜测是,这个包属于某个我不知道名称的模块,我需要在Gradle中作为依赖项和module-info.java文件中作为要求包含它。这是我有能力做的事情,但我的谷歌搜索几乎没有发现这解释了这个包的来源。在这个SO问题下的评论表明,这种com.sun包根本不应该使用,似乎暗示可能有一些等效的更好使用。
我在视窗10中也遇到了同样的问题。谢天谢地,@Slaw的建议是正确的。
您需要转到IDE中的VM选项(运行-
--add-exports
javafx.graphics/com.sun.glass.ui=ALL-UNNAMED
在那之后它应该可以工作。
我有一个在github上的项目。我有两台不同的计算机使用该项目。我提到github的原因是因为这两台计算机有完全相同的项目。但是在其中一台计算机上,我得到一个包不存在错误。那个包com.sun.glass 下面我试着用 我的netbeans autocomplete显示包sun存在于com中,但包glass不存在于sun中。我在网上找不到关于这个错误的任何信息,已经搜索了几天了。正如我所说,最奇怪
自从升级到install4j 7.0.5和Java 10以来,在Windows上运行我们的应用程序的用户越来越多地报告应用程序抛出 通过install4j创建的exe文件启动应用程序时。该错误是通过创建javafx实例触发的。嵌入摆动JFXPanel穿透反射: 我们目前怀疑由于某种原因加载了不兼容的DLL(glass.DLL似乎包含stacktrace中提到的本机方法)。 有人知道如何防止此错误吗
目前我有玻璃映射器v3,并在升级到最新的玻璃映射器,即v4的过程中,但是当我构建项目时,它给我以下错误。 严重性代码描述项目文件行禁止显示状态错误CS1705程序集“Glass.Mapper.Sc.Mvc”,标识为“Glass.Mapper.Sc.Mvc”,版本=4.2.1.188,Culture=neutral,PublicKeyToken=null,使用System.Web。Mvc,Versi
我已经完成了在glassfish v4中添加SSL证书的步骤。我已经通过浏览器和java swing客户端验证了它的有效性(我在客户端使用apache的http客户端库) 什么不工作是管理控制台!由于成功导入SSL,我不能再连接到管理控制台,http://www.myhost.com:4848,我仍然得到登录屏幕,总是工作的管理员用户名/密码组合已停止工作。我也注意到当尝试部署一个网络应用程序从n
我正在用JavaMail创建一个邮件客户端。我已经成功地收到了电子邮件,它们大部分都被输入了数据库。内容配置未正确输入数据库。我在将内联对象导入数据库时遇到问题。 以下是我已经编写并正在我的邮件客户端中实现的代码:** 收到以下错误代码: 这只发生在收到的gmail上。所有其他收到的邮件都工作正常。你能帮我解决这个问题吗?谢谢你
本文向大家介绍Android学习教程之图片毛玻璃效果(4),包括了Android学习教程之图片毛玻璃效果(4)的使用技巧和注意事项,需要的朋友参考一下 本教程为大家分享了Android毛玻璃效果的具体代码,供大家参考,具体内容如下 BlurimageActivity.java代码: activity_blurimage.xml内容: utils文件夹下APP.java代码: FastBlurUti