wil*_*824 6 java eclipse debugging swing splash-screen
我在网上搜索但找不到这个问题的答案:
我需要根据您访问的模块调试更改SplashScreen的应用程序的功能.
我知道代码:
SplashScreen splash = SplashScreen.getSplashScreen();
Run Code Online (Sandbox Code Playgroud)
通过时,可用于获取实例:
仍然当我尝试通过从Eclipse中的VM args传递-splash值来运行应用程序时,它无效.
它实际上是可能的,因为SplashScreen.getSplashScreen()始终为NULL.我一直试图通过而没有成功:
现在我在这个Splash api中看到了很多限制,因为总是需要传递一个参数.我认为能够在运行时传递参数会更灵活:(
任何帮助都会非常感激!
Ste*_*hen 13
好吧,这也咬了我一下.
我构建了一个带有清单条目的可运行jar
SplashScreen-Image: MyGraphic.jpg
Run Code Online (Sandbox Code Playgroud)
它按照预期的方式工作.
从Eclipse,将VM arg指定为
-splash:MyGraphic.jpg
Run Code Online (Sandbox Code Playgroud)
没有这样的运气
SplashScreen.getSplashScreen()返回null.
原因是JDK中的SplashScreen.getSplashScreen()的脑死亡实现(至少1.6).我认为.如果不了解本机代码正在做什么,这很难说.但是,这是java.awt.SplashScreen中的这个方法.我不确定它是否被调用但是研究它确实为我提供了在Eclipse中使用它所需的基本线索:
public synchronized URL getImageURL() throws IllegalStateException {
checkVisible();
if (imageURL == null) {
try {
String fileName = _getImageFileName(splashPtr);
String jarName = _getImageJarName(splashPtr);
if (fileName != null) {
if (jarName != null) {
imageURL = new URL("jar:"+(new File(jarName).toURL().toString())+"!/"+fileName);
} else {
imageURL = new File(fileName).toURL();
}
}
}
catch(java.net.MalformedURLException e) {
// we'll just return null in this case
}
}
return imageURL;
}
Run Code Online (Sandbox Code Playgroud)
请注意,对于文件(即命令行而不是jar启动),它不会使用getResource()来获取URL,而是打开相对于CWD的文件.由于Eclipse运行配置默认从项目的根目录运行,因此答案是将路径指定为相对路径,而不是期望进行类路径查找.
因此,由于我使用maven构建,我的图像位于src/main/resources/MyGraphic.jpg.将其指定为命令行参数:ie
-splash:src/main/resources/MyGraphic.jpg
Run Code Online (Sandbox Code Playgroud)
允许它在Eclipse中工作(或者,我想,任何命令行)
我不确定为什么这样,因为getImageURL方法不是由getSplashScreen()调用的,但是它可以工作.
对我来说,这是Sun/Oracle的一种脑死亡.他们可以轻松地使用像imageURL = getResource(filename)这样的类路径查找,但他们没有.
简短的回答是,Splash Screen命令行语法是指相对于当前工作目录的文件名,而不是相对于类路径的文件名.
| 归档时间: |
|
| 查看次数: |
5297 次 |
| 最近记录: |