我希望我的Java程序使用系统的代理配置.因此,我使用在许多地方找到的代码(例如此答案)设置java.net.useSystemProxies为true并调用ProxySelector.getDefault().select(...)以发现我想要访问的特定主机的代理.当我在Internet属性中配置单个显式代理服务器时,这可以正常工作.但是如果我设置了"使用自动配置脚本",它总是返回DIRECT"代理".
我知道该脚本有效,因为我的浏览器可以访问它为其返回代理服务器的主机,并且没有脚本集,它不能.我甚至尝试将脚本简化为最基本的要点:
function FindProxyForURL(url, host)
{
return "PROXY my.proxy.mydomain:3128";
}
Run Code Online (Sandbox Code Playgroud)
它在我的浏览器中工作,但ProxySelector.getDefault().select(...)仍然只返回DIRECT.
我错过了什么吗?(这是在Java 1.6和Windows 7上,它是否重要.)
我正在编写一个CustomLayout用于logback,因为我想调整线程名称和记录器名称.logback文档说
在上面的示例中,doLayout方法忽略事件中包含的任何最终异常.在现实世界的布局实现中,您很可能也想要打印异常的内容.
嗯,是的,当然我想在默认实现时打印堆栈跟踪.但我找不到任何指示.我下载了源代码并环顾四周.以下似乎有效:
/**
* How much stack to print if there's an exception.
*/
private List<String> stackOptionList = Arrays.asList("full");
@Override
public String doLayout(ILoggingEvent event) {
StringBuffer sbuf = new StringBuffer(128);
. . .
IThrowableProxy proxy = event.getThrowableProxy();
if (proxy != null) {
ThrowableProxyConverter converter = new ThrowableProxyConverter();
converter.setOptionList(stackOptionList);
converter.start();
sbuf.append(converter.convert(event));
sbuf.append(CoreConstants.LINE_SEPARATOR);
}
. . .
return sbuf.toString();
}
Run Code Online (Sandbox Code Playgroud)
有更好/更批准的方式吗?
关于如何在像素着色器中处理alpha分量有什么不寻常之处吗?我有一个WPF应用程序,我的艺术家为我提供灰度图像作为背景,应用程序根据当前状态着色这些图像.所以我写了一个像素着色器(使用WPF像素着色器效果库基础结构)来用作Image元素的效果.着色器将颜色作为参数,将其转换为HSL,以便操作亮度.然后,对于每个灰色像素,它计算亮度在颜色参数和白色之间插入的颜色与源像素的亮度成比例.
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 src = tex2D(implicitInputSampler, uv);
// ...Do messy computation involving src brightness and color parameter...
float4 dst;
dst.r = ...
dst.g = ...
dst.b = ...
dst.a = src.a;
return dst;
}
Run Code Online (Sandbox Code Playgroud)
这对于alpha = 1的像素效果很好.但是在alpha = 0的情况下,结果像素变白,而不是让窗口的背景显示出来.所以我做了一个微小的改变:
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 src = tex2D(implicitInputSampler, uv);
if (src.a == 0)
return src;
...
Run Code Online (Sandbox Code Playgroud)
而现在透明的部分确实是透明的.为什么?为什么dst.a = src.a第一个版本的声明没有实现呢?不幸的是,即使这只是一个部分修复,因为它看起来像0 <alpha <1的像素是白色的.
有谁知道我不了解alpha?
我的程序创建一个带有 的窗口ShowActivated=false,这样它在打开时就不会窃取键盘焦点(该窗口是为了响应来自网络的事件而创建的)。我希望能够指定当用户切换到窗口时特定的 TextBox 字段接收焦点。然而,看似显而易见的方法(FocusManager.FocusedElement在窗口的标记中使用,或this.textbox.Focus()在显示窗口时调用)具有激活窗口的副作用。
我最终为窗口的Activated事件添加了一个事件处理程序,它 (a) 进行所需的Focus()调用,(b) 将其自身从Activated事件中删除,以便它只发生一次。这看起来很粗糙。我错过了什么吗?