Эта проблема также возникала для меня. Причиной стало то, что мы создали прозрачный веб-прокси (Squid). Брандмауэр здесь настроен на тихое перенаправление всего трафика порта 80 через Squid. Добавление исключения к имени хоста сервера SVN в конфигурации брандмауэра устранило проблему.
Это работает с JDK6 и JDK7. Скопируйте + вставьте и получайте удовольствие;)
Примечание: для JDK6 измените
javax.swing.plaf.nimbus
на
com. Sun. Java. Swing. Plaf. Nimbus
.
import java.awt.*;
import java.lang.reflect.*;
import javax.swing.*;
import javax.swing.plaf.nimbus.*;
public class Main {
public static void main(String[] args)
throws InterruptedException, InvocationTargetException {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(new NimbusLookAndFeel() {
@Override
public UIDefaults getDefaults() {
UIDefaults ret = super.getDefaults();
ret.put("defaultFont",
new Font(Font.MONOSPACED, Font.BOLD, 16)); // supersize me
return ret;
}
});
new JFrame("Hello") {
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout(FlowLayout.LEFT));
setSize(500, 500);
setLocationRelativeTo(null);
add(new JLabel("someLabel 1"));
add(new JButton("someButton 1"));
add(new JLabel("someLabel 2"));
add(new JButton("someButton 2"));
setVisible(true);
}
};
} catch (Exception ex) {
throw new Error(ex);
}
}
});
}
}
Одна вещь, которая поражает меня по сей день, - это то, что сеттеры LaF [setFont, setBackground, и т. Д.] На самом деле не устанавливают реальные свойства. В спецификации сказано, что LaF могут игнорировать установленные пользователем шрифты, цвета и т. Д. Вот почему GTKLaF полностью не работает. Он использует системные настройки темы gtk, а не настройки программиста. IIRC Nimbus имеет отдельный частный класс пакета, который содержит значения по умолчанию (NimbusDefaults?), И к которому нелегко получить доступ.
Я предлагаю никогда никогда не использовать GTK или Nimbus LAF, если вы планируете настраивать внешний вид в любом
Быстрый поиск в Google дает это для GTK
Обсуждение этих проблем в nimbus можно найти здесь .
Оберните ваш шрифт в FontUIResource . У меня была такая же проблема с цветами UIManager, и ColorUIResource все исправил. Не копаясь в JDK, я думаю, что есть места, где компоненты ожидают (читайте: проверьте через instanceof) для UIResources (возможно, кто-то сможет это подтвердить)
Java LAF API немного неуклюже, но нет ничего лучше, чем проверить исходный код, чтобы получить ответы.
Обратите внимание, что MetalLookAndFeel и Nimbus - разные реализации, и свойства для каждого из них не обязательно должны быть одинаковыми. .
В следующих примерах используется MetalLookAndFeel.
package com.stackoverflow.laf.font;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class SetFontExample {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
UIManager.put("Label.font", new Font(Font.SANS_SERIF, 0, 20));
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
JFrame frame = new JFrame("Set font example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JLabel("Font test"));
frame.pack();
frame.setVisible(true);
}
});
}
}
Это работает, потому что свойство "Label.font" существует на Metal и оно правильно использует это свойство.
Вы можете проверить это следующим образом:
package com.stackoverflow.laf;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
public class ListLAFUIDefaults {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
try {
// Choose LAF
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
UIDefaults defaults = UIManager.getLookAndFeel().getDefaults();
System.out.println(defaults);
// Check a property
String propertyKey = "defaultFont";
System.out.println(UIManager.getLookAndFeel().getName() +
(defaults.containsKey(propertyKey) ? " contains " : " doesn't contain ") +
"property " + propertyKey);
}
});
}
}