如果我使用JDK1.8_40或更新版本(Oracle或OpenJDK执行相同操作),以下代码和对话框调整大小将使应用程序崩溃(尝试过Windows 7,x64,64位JDK)
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JDialog dialog = new JDialog();
dialog.add(new JPanel());
dialog.setVisible(true);
dialog.setBounds(100, 100, 100, 100);
final JWindow dependentWindow = getjWindow(dialog);
dependentWindow.setVisible(true);
dependentWindow.setBounds(100, 100, 100, 100);
Timer t = new Timer(300, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dependentWindow.setVisible(!dependentWindow.isVisible());
}
});
t.start();
}
});
} …
Run Code Online (Sandbox Code Playgroud) 可能重复:JNLP中的java.security.properties
我们有一个桌面应用程序,我们开始使用Java WebStart.从JDK 1.8.71开始,MD5现已禁用以进行X509证书验证.遗憾的是,我们无法更改我们正在使用的证书.
解决方法是更改java.security文件(jre/lib/security/java.security),使得"jdk.certpath.disabledAlgorithms"不再包含MD5,但由于我们无权访问,因此这绝对是不可能的.客户电脑.我们尝试在JNLP文件中设置属性(不起作用)并调用:
java.security.Security.setProperty("jdk.certpath.disabledAlgorithms", "");
java.security.Security.setProperty("jdk.tls.disabledAlgorithms", "");
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于本地启动的JAR,但不适用于JNLP.知道这应该有用吗?我找不到任何关于JNLP可以编辑哪些安全属性的文档.
为什么下面的代码没问题,但是一旦将T作为泛型添加到Main,它会抛出以下错误?
'Main.this'不能从静态上下文中引用
//public class Main<T> { - uncomment this for the error to appear
public class Main {
public static void main(String[] args) {
new Main();
}
class TestNonStatic {}
private static class TestStatic {
public TestStatic(TestNonStatic nonStatic) { //this is the line that fails
}
}
}
Run Code Online (Sandbox Code Playgroud)
我经历了泛型限制,但我不明白为什么这会导致错误.我也经历了很多类似的问题,但我不明白为什么添加通用会改变这种情况.
我想听听Swing上的所有拖放事件.
我设法监听拖动事件的一种方法是添加:
final long mask = AWTEvent.MOUSE_EVENT_MASK + AWTEvent.MOUSE_MOTION_EVENT_MASK;
AWTEventListener eventListener = new AWTEventListener() {
public void eventDispatched(final AWTEvent event) {}
};
Toolkit.getDefaultToolkit().addAWTEventListener(eventListener, mask);
Run Code Online (Sandbox Code Playgroud)
但这并没有得到丢弃事件,甚至在放弃时也不会从鼠标中释放事件.有没有办法拦截应用程序中的所有拖放事件,而不是分别在每个组件上?