Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как определить где бага? (мешанина в Metal L&F) / 7 сообщений из 7, страница 1 из 1
17.02.2016, 19:33
    #39173537
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить где бага? (мешанина в Metal L&F)
Есть следующий код:
Код: 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
17.02.2016, 19:35
    #39173539
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить где бага? (мешанина в Metal L&F)
Я понимаю, что можно включить Numbus и с ним жить, но хочется починить, чтобы с Metal работало.
...
Рейтинг: 0 / 0
18.02.2016, 09:18
    #39173768
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить где бага? (мешанина в Metal L&F)
Бага появляется только когда скролишь? -Dsun.java2d.xrender=false пробовал?
...
Рейтинг: 0 / 0
18.02.2016, 12:36
    #39173992
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить где бага? (мешанина в Metal L&F)
Да! Ключики разные пробовал, но общего их описания как-то не нашел. Конкретно этот ключик только что попробовал - помогло. Спасибо.
...
Рейтинг: 0 / 0
18.02.2016, 12:58
    #39174028
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить где бага? (мешанина в Metal L&F)
chabapokДа! Ключики разные пробовал, но общего их описания как-то не нашел.
https://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html

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

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

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


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