我一直在尝试一个小程序,将桌面图像设置为当前的“每日天文图片”。我一直在使用JNA建议从类似的问题()设置墙纸。但是,我的代码无法正常工作。我不确定出什么问题-
我对JNA的经验很少。这是代码。请忽略完全误导的类名-我从另一个项目开始着手。无效的部分是墙纸的最终设置-没有错误提示,它什么也没做。图像保存良好。
编辑-我决定制作一个批处理文件来设置注册表项并运行它。批处理文件有时可以工作,然后在其他时间拒绝工作。到目前为止,这只是部分成功!该程序现在是:
编辑2-我从中导入了墙纸代码,可以用Java /Groovy以编程方式更改Windows桌面墙纸吗?一旦我记得关闭输出文件(doh!),它就可以正常工作。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.text.BadLocationException;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTML.Tag;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.HTMLEditorKit.ParserCallback;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.File;
import java.util.Iterator;
import javax.imageio.*;
import javax.imageio.stream.*;
public class RSSReader {
private class HTMLParse extends HTMLEditorKit
{
/**
* Call to obtain a HTMLEditorKit.Parser object.
*
* @return A new HTMLEditorKit.Parser object.
*/
public HTMLEditorKit.Parser getParser()
{
return super.getParser();
}
}
private class HREFCallback extends ParserCallback
{
private String base;
public HREFCallback(String base)
{
this.base = base;
}
@Override
public void handleStartTag(Tag t,
MutableAttributeSet a,
int pos)
{
if (t == HTML.Tag.A)
{
String href = (String)(a.getAttribute(HTML.Attribute.HREF));
if (href.endsWith("jpg") && href.startsWith("image"))
{
URL u_img;
try
{
u_img = new URL(base + href);
System.out.println(u_img.toString());
Image img = ImageIO.read(u_img);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
double aspectScreen = dim.getWidth() / dim.getHeight();
double aspectImage = img.getWidth(null) / img.getHeight(null);
System.out.println(Double.toString(aspectScreen)
+ " " + Double.toString(aspectImage));
if (aspectScreen / aspectImage > 1.1 || aspectScreen / aspectImage < 0.9)
{
int x = 0;
int y = 0;
int w = (int)img.getWidth(null);
int h = (int)img.getHeight(null);
if (aspectScreen > aspectImage)
{
// Image needs to be letterboxed
double newHeight = img.getWidth(null) / aspectScreen;
y = (int)((img.getHeight(null) - newHeight) / 2);
h = (int)newHeight;
}
else
{
double newWidth = img.getHeight(null) / aspectScreen;
x = (int)(img.getWidth(null) - newWidth / 2);
w = (int)newWidth;
}
img = Toolkit.getDefaultToolkit().createImage((new FilteredImageSource(img.getSource(),
new CropImageFilter(x,y,w,h))));
}
Image scaled = img.getScaledInstance(dim.width, dim.height, Image.SCALE_DEFAULT);
String l_appdata = System.getenv("APPDATA");
System.out.println(l_appdata);
if (!l_appdata.equals(""))
{
try {
BufferedImage bufImage =
new BufferedImage(scaled.getWidth(null), scaled.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D bufImageGraphics = bufImage.createGraphics();
bufImageGraphics.drawImage(scaled, 0, 0, null);
String dirname = l_appdata + "\\" + "APOD Wallpaper";
(new File(dirname)).mkdir();
String fname = dirname + "\\" + "apod_wallpaper1.jpg";
File outputfile = new File(fname);
Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter)iter.next();
// instantiate an ImageWriteParam object with default compression options
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(1); // an integer between 0 and 1
// 1 specifies minimum compression and maximum quality
File file = new File(fname);
FileImageOutputStream output = new FileImageOutputStream(file);
writer.setOutput(output);
IIOImage image = new IIOImage(bufImage, null, null);
writer.write(null, image, iwp);
writer.dispose();
String scriptName = dirname + "\\" + "setwallpaper.bat";
File s = new File(scriptName);
BufferedWriter wr = new BufferedWriter(new FileWriter(s));
wr.write(":: Configure Wallpaper");
wr.newLine();
wr.write("REG ADD \"HKCU\\Control Panel\\Desktop\" /V Wallpaper /T REG_SZ /F /D \"" + fname + "\"");
wr.newLine();
wr.write("REG ADD \"HKCU\\Control Panel\\Desktop\" /V WallpaperStyle /T REG_SZ /F /D 0");
wr.newLine();
wr.write("REG ADD \"HKCU\\Control Panel\\Desktop\" /V TileWallpaper /T REG_SZ /F /D 2");
wr.newLine();
wr.write(":: Make the changes effective immediately");
wr.newLine();
wr.write("%SystemRoot%\\System32\\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters");
wr.newLine();
wr.close();
String cmd = "cmd /C start /D\"" + dirname + "\" setwallpaper.bat ";
System.out.println(cmd);
Process p = Runtime.getRuntime().exec(cmd);
try
{
p.waitFor();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}
}
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
private static RSSReader instance = null;
private RSSReader() {
}
public static RSSReader getInstance() {
if(instance == null) {
instance = new RSSReader();
}
return instance;
}
public void writeNews() {
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
String base = "http://apod.nasa.gov/apod/";
URL u = new URL(base + "astropix.html"); // your feed url
BufferedReader in = new BufferedReader(new InputStreamReader(u
.openStream()));
HTMLEditorKit.Parser parse = new HTMLParse().getParser();
parse.parse(in,new HREFCallback(base),true);
}
catch (Exception ex)
{
//do nothing
}
}
public static void main(String[] args) {
RSSReader reader = RSSReader.getInstance();
reader.writeNews();
}
}
您可以看一下JAWC是如何做到的。
FTS:
Jawc代表Just Another Wallpaper Changer,或者,如果您愿意,则代表JAva Wallpaper
Changer。它是一个基于插件的墙纸更换器,可以从>许多不同的源(例如PC的文件夹,Flickr或VladStudio)更改桌面背景图片,仅取决于您启用了哪些插件。Jawc是使用Java编写的,并且经过测试可在Windows,Linux和Mac Os X系统上工作。
问题内容: 我正在开发一个简单的应用程序,可以根据用户输入设置墙纸。我缺少设置墙纸的代码。我一直在徒劳的许多网站中寻找它。谁能张贴一个示例代码,将其设置为墙纸并保存在该文件夹中,作为墙纸? 问题答案: 适用于Android 1.5及更高版本
问题内容: 我不敢相信我以前没有做过,但是我想得到一个明确的答案,所以我已经准备好了。 我有一个Apache的配置文件,看起来像这样: 因此,这可以很好地处理html和php文件。但是我在那里有多个项目,因此想开始使用子域。我想要做的是将文件从用作根目录。 我尝试将以下内容添加到我的apache文件的底部: 但apache抱怨: 我知道我犯了一个基本错误,但是我不确定这是什么。 编辑 现在是我完整
我试图在Wildfly Swarm中设置一个Camel Rest服务,但我不确定类是如何实例化的,甚至不知道是如何实例化的。我下载了Wildfly Swarm示例,并查看了Camel CXF-JAXRS项目,这是有意义的,但它使用XML定义路由。我想使用Java DSL。我的类如下所示: 我已经尝试过使用和不使用文件。Swarm启动,但我无法浏览到rest服务endpoint。 如何调用?我应该有
本文向大家介绍配置java环境变量(linux mac windows7),包括了配置java环境变量(linux mac windows7)的使用技巧和注意事项,需要的朋友参考一下 linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586.bin 这时会出
任何想法/暗示都非常受欢迎;谢了!
本文向大家介绍CentOS 7.0关闭默认防火墙启用iptables防火墙的设置方法,包括了CentOS 7.0关闭默认防火墙启用iptables防火墙的设置方法的使用技巧和注意事项,需要的朋友参考一下 CentOS在7.0之前貌似都是用的iptables为防火墙的,在7.0以后都是firewall,其实我也不知道为嘛,但是大部分人都是用iptables,so我也用它了。 下面通过本文给大家分享C