当前位置: 首页 > 知识库问答 >
问题:

包com出错。太阳玻璃学习Java Native Access时的ui

亢建木
2023-03-14

我试图在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包根本不应该使用,似乎暗示可能有一些等效的更好使用。

共有1个答案

巫马山
2023-03-14

我在视窗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