powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить где бага? (мешанина в Metal L&F)
7 сообщений из 7, страница 1 из 1
Как определить где бага? (мешанина в Metal L&F)
    #39173537
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть следующий код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
import javax.swing.table.AbstractTableModel;

public class MyFrame extends javax.swing.JFrame {

    public MyFrame() {
        initComponents();
    }
    
    @SuppressWarnings("unchecked")
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setPreferredSize(new java.awt.Dimension(680, 300));

        jTable1.setModel(new MyModel());
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 596, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 352, Short.MAX_VALUE)
        );

        pack();
    }

    public static void main(String args[]) {
        String curr = javax.swing.UIManager.getLookAndFeel().getName();
        System.out.println("curernt ui="+curr);
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                System.out.println("info = " + info.getName());
                if ("Metal".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    //break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(MyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
}

class MyModel extends AbstractTableModel {

    public MyModel() {
    }

    @Override
    public int getRowCount() {
        return 4000;
    }

    @Override
    public int getColumnCount() {
        return 4;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return "row "+rowIndex+", col "+columnIndex;
    }
    
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
    
}




Этот код на моей ubuntu 12.04 x64 глючит, если поскроллить таблицу туда-сюда (прилагаю картинку) глючит примерно до 2000 строки, а потом все показывается нормально. Как будто каждый кадр во время прокрутки прорисовывается поверх предыдущего, а не вместо. При этом, на винде он работает, на других машинах с линуком (правда там 14.04) он тоже работает, и если поставить Look&Feel "Nimbus" или "GTK+", то работает, а на "CDE/Motif" и "Metal" наблюдается такой глюк.

Протестил на java 1.8.0_72, 1.8.0_66 версий x64 и i586. Причем, через pmap видно, что у x64 и у i586 не повторяется ни одна либа.
И полный апдейт системы на последний версии не помог. При этом степень бага тем сильней, чем больше строк дать. При 2040 строках оно еще не глючит, а при 2050 начинает глючить слегка.
...
Рейтинг: 0 / 0
Как определить где бага? (мешанина в Metal L&F)
    #39173539
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю, что можно включить Numbus и с ним жить, но хочется починить, чтобы с Metal работало.
...
Рейтинг: 0 / 0
Как определить где бага? (мешанина в Metal L&F)
    #39173768
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бага появляется только когда скролишь? -Dsun.java2d.xrender=false пробовал?
...
Рейтинг: 0 / 0
Как определить где бага? (мешанина в Metal L&F)
    #39173992
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да! Ключики разные пробовал, но общего их описания как-то не нашел. Конкретно этот ключик только что попробовал - помогло. Спасибо.
...
Рейтинг: 0 / 0
Как определить где бага? (мешанина в Metal L&F)
    #39174028
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokДа! Ключики разные пробовал, но общего их описания как-то не нашел.
https://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html

chabapokКонкретно этот ключик только что попробовал - помогло. Спасибо.
Я посмотрел исходники Swing - у Metal вообще нет никакой специфики для JTable. И высота строки там вообще фиксированная.
Поэтому проблема скорее всего в аппаратной отрисовке, которая появилась, то ли в Java 5 то ли в Java 6. Этот ключ как раз её отключает для Linux. Визуально может немного подтормаживать без него.
...
Рейтинг: 0 / 0
Как определить где бага? (мешанина в Metal L&F)
    #39174467
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На глаз вроде не тормозит с отключенным. Просто заработало, а видимых тормозов не появилось.

Вообще, у меня нету Xorg.conf. Как по умолчанию ОС как поставилась - так уже несколько лет и стоит, и багов не замечал.
Наверное, из за отсутствия Xorg.conf оно не загрузило xrender pipeline, или что-то недозагрузило.

Кроме того, раз этого бага нету в nimbus, то это скорей всего означает, что nimbus l&f не использует xrender pipeline.
...
Рейтинг: 0 / 0
Как определить где бага? (мешанина в Metal L&F)
    #39174474
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokКроме того, раз этого бага нету в nimbus, то это скорей всего означает, что nimbus l&f не использует xrender pipeline.
Использует, но иначе. Там какая-то хитрая отрисовка на всё.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить где бага? (мешанина в Metal L&F)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]