我知道有一个WeakHashMapin java.util,但由于它只使用了WeakReferences,只有这个Map引用,引用的对象将在下一个GC循环中丢失.因此,如果您想要缓存随机数据,这几乎是无用的,这很可能会再次被请求而不会在其余时间进行硬链接.最好的解决方案是使用SoftReferences代替的地图,但我没有在Java RT Package中找到一个.
我试图改进Java Html文档一点点,但我遇到了问题HttpUrlConntion.有一点是,如果用户代理是Java VM,某些服务器会阻止请求.另一个问题是HttpUrlConnection没有设置Referrer或Location头字段.由于几个站点使用这些字段来验证内容是从他们自己的站点访问的,因此我也被阻止了.据我所知,唯一的解决方案是替换HTTP协议的URL处理程序.或者有没有办法修改默认的HTTP Handler?
如果以<html>开头,Swing JLabel会自动将任何文本解释为HTML内容.如果此HTML的内容是包含无效URL的图像,则会导致整个GUI挂起,因为应加载此图像的ImageFetche将由NPE退出.
要重现此问题,只需按如下方式创建JLabel
new JLabel("<html><img src='http:\\\\invalid\\url'>")
Run Code Online (Sandbox Code Playgroud)
我知道有一个客户端属性可以防止JLabel解释HTML.但是JLabel是许多Swing组件(如JTree,JTable等)的默认渲染器实现,这使得几乎任何允许用户输入的Swing应用程序都成为问题.因此,我没有实现大量的自定义渲染器,而是在寻找一种全局解决方案来禁用HTML解释.
我在Opera 9.64 Build 10487中的JVM 1.6.0_12上运行了一个applet的线程转储 - 它显示了三个事件队列!据我所知,Java Swing事件处理是单线程的 - 在最近的任何更新中都做了这个改变吗?
我的问题是,多个事件队列往往会导致死锁,因为我有更多的锁而不仅仅是GUI TreeLock.
首先描述问题:在由于宽度或高度的变化而重新布局期间,Java的ScrollPaneLayout在设置其视口的边界之前请求其子节点的preferredSize.在Text-Components上调用getPreferredSpan可以更改布局,因为此getPreferredSpan在内部调用setSize.结果是,在这种情况下,没有视图(扩展javax.swing.text.View)可以确保检索它的父组件的实际大小.由于尚未设置视口的边界,因此getVisibleRect将在此位置失败.检查文本组件的有效性以阻止布局过程不是一个选项,因为在这种情况下它已经是有效的.
所以,问题是:是否有可能找出JComponent的边界是否是最新的?
如果我通过调用例如打开和关闭套接字
Socket s = new Socket( ... );
s.setReuseAddress(true);
in = s.getInputStream();
...
in.close();
s.close();
Run Code Online (Sandbox Code Playgroud)
Linux声明此套接字仍处于打开状态,或者至少是连接的文件描述符.当lsof查询此进程的打开文件时,有一个关闭连接的条目:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 9268 user 5u sock 0,4 93417 can't identify protocol
Run Code Online (Sandbox Code Playgroud)
此条目将一直保留到程序关闭之前.有没有其他方法可以最终关闭套接字?我有点担心我的java应用程序可能会阻塞许多文件描述符.这可能吗?或者,即使重新设置了ReuseAdress,java还是会保留这些套接字来重用它们吗?
这不是一个如何自动调用dispose的问题 - 我的问题恰恰相反:我有一个线程池,其中每个线程都有一个ThreadStatic Graphics(由Image创建)来执行文本大小测量.现在我遇到了一个问题,即不时读取TextRenderingHint属性失败(导致ArgumentException),图形似乎被处理掉了.
是否存在一些处理图形的机制,例如,如果线程长时间处于空闲状态?
想象一下两种常见情况的组合:在 VK_ESCAPE 上关闭的 JDialog(或 JFrame)(设置为根窗格上的键绑定)和应该在 ESC 上关闭的内部 JPopupMenu。问题是:如果弹出窗口可见,按 Esc 总是关闭对话框 - 事件。显然,弹出窗口甚至没有收到键事件,因此它不能被弹出窗口使用。有没有办法让它正常工作,以便在第一个 ESC 事件上关闭弹出窗口,在第二个关闭对话框?顺便说一句:它确实与 JComboBox 一起使用,默认情况下,当按下转义键时它会关闭。