Мой графический интерфейс, написанный на SWT, работает медленнее во время работы.
С помощью инструмента Sleak я обнаружил, что экземпляр TextLayout создается каждый раз, когда в моем экземпляре StyledText добавляется символ.
Используя фрагмент, предоставленный eclipse.org, я заметил ту же проблему.
Я работаю в Linux Ubuntu с последней версией SWT.
После этого сообщения вы можете найти небольшой фрагмент: запустите Snippet163 с помощью Sleak, чтобы увидеть экземпляры TextLayout.
package styledtext;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.StyledTextLineSpacingProvider;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.DeviceData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Snippet163 {
private static Display display;
private static Shell shell;
public static void main(String[] args) {
DeviceData data = new DeviceData();
data.tracking = true;
display = new Display(data);
Sleak sleak = new Sleak();
sleak.open();
shell = new Shell(display);
shell.setText("Snippet 163");
shell.setLayout(new GridLayout());
shell.setSize(800, 600);
run();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void run() {
StyledText text = new StyledText (shell, SWT.V_SCROLL | SWT.H_SCROLL );
//text.setAlwaysShowScrollBars(true);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
/* useless ?
text.setLineSpacingProvider(new StyledTextLineSpacingProvider() {
public Integer getLineSpacing(int lineIndex) {
return 5;
}
});
*/
text.setText("0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ");
// make 0123456789 appear bold
StyleRange style1 = new StyleRange();
style1.start = 0;
style1.length = 10;
style1.fontStyle = SWT.BOLD;
text.setStyleRange(style1);
// make ABCDEFGHIJKLM have a red font
StyleRange style2 = new StyleRange();
style2.start = 11;
style2.length = 13;
style2.foreground = display.getSystemColor(SWT.COLOR_RED);
text.setStyleRange(style2);
// make NOPQRSTUVWXYZ have a blue background
StyleRange style3 = new StyleRange();
style3.start = 25;
style3.length = 13;
style3.background = display.getSystemColor(SWT.COLOR_BLUE);
text.setStyleRange(style3);
Button button = new Button(shell, SWT.PUSH);
button.setText("insert!");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
for (int i = 0; i < 10; i++) {
text.insert("Update ! " + i + "\n");
}
}
});
}
}
package styledtext;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.DeviceData;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Instructions on how to use the Sleak tool with a standlaone SWT example:
*
* Modify the main method below to launch your application.
* Run Sleak.
*
*/
public class Sleak {
Display display;
Shell shell;
List list;
Canvas canvas;
Button start, stop, check;
Text text;
Label label;
Object [] oldObjects = new Object [0];
Error [] oldErrors = new Error [0];
Object [] objects = new Object [0];
Error [] errors = new Error [0];
public static void main (String [] args) {
DeviceData data = new DeviceData();
data.tracking = true;
Display display = new Display (data);
Sleak sleak = new Sleak ();
sleak.open ();
while (!sleak.shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public void open () {
display = Display.getCurrent ();
shell = new Shell (display);
shell.setText ("S-Leak");
list = new List (shell, SWT.BORDER | SWT.V_SCROLL);
list.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
refreshObject ();
}
});
text = new Text (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
canvas = new Canvas (shell, SWT.BORDER);
canvas.addListener (SWT.Paint, new Listener () {
public void handleEvent (Event event) {
paintCanvas (event);
}
});
check = new Button (shell, SWT.CHECK);
check.setText ("Stack");
check.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event e) {
toggleStackTrace ();
}
});
start = new Button (shell, SWT.PUSH);
start.setText ("Snap");
start.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
refreshAll ();
}
});
stop = new Button (shell, SWT.PUSH);
stop.setText ("Diff");
stop.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
refreshDifference ();
}
});
label = new Label (shell, SWT.BORDER);
label.setText ("0 object(s)");
shell.addListener (SWT.Resize, new Listener () {
public void handleEvent (Event e) {
layout ();
}
});
check.setSelection (false);
text.setVisible (false);
Point size = shell.getSize ();
shell.setSize (size.x / 2, size.y / 2);
shell.open();
}
void refreshLabel () {
int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0, regions = 0;
for (int i=0; i
Подробнее здесь: https://stackoverflow.com/questions/782 ... styledtext
SWT — новый TextLayout создается каждый раз, когда текст добавляется в StyledText. ⇐ JAVA
Программисты JAVA общаются здесь
1712650940
Гость
Мой графический интерфейс, написанный на SWT, работает медленнее во время работы.
С помощью инструмента Sleak я обнаружил, что экземпляр TextLayout создается каждый раз, когда в моем экземпляре StyledText добавляется символ.
Используя фрагмент, предоставленный eclipse.org, я заметил ту же проблему.
Я работаю в Linux Ubuntu с последней версией SWT.
После этого сообщения вы можете найти небольшой фрагмент: запустите Snippet163 с помощью Sleak, чтобы увидеть экземпляры TextLayout.
package styledtext;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.StyledTextLineSpacingProvider;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.DeviceData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Snippet163 {
private static Display display;
private static Shell shell;
public static void main(String[] args) {
DeviceData data = new DeviceData();
data.tracking = true;
display = new Display(data);
Sleak sleak = new Sleak();
sleak.open();
shell = new Shell(display);
shell.setText("Snippet 163");
shell.setLayout(new GridLayout());
shell.setSize(800, 600);
run();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void run() {
StyledText text = new StyledText (shell, SWT.V_SCROLL | SWT.H_SCROLL );
//text.setAlwaysShowScrollBars(true);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
/* useless ?
text.setLineSpacingProvider(new StyledTextLineSpacingProvider() {
public Integer getLineSpacing(int lineIndex) {
return 5;
}
});
*/
text.setText("0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ");
// make 0123456789 appear bold
StyleRange style1 = new StyleRange();
style1.start = 0;
style1.length = 10;
style1.fontStyle = SWT.BOLD;
text.setStyleRange(style1);
// make ABCDEFGHIJKLM have a red font
StyleRange style2 = new StyleRange();
style2.start = 11;
style2.length = 13;
style2.foreground = display.getSystemColor(SWT.COLOR_RED);
text.setStyleRange(style2);
// make NOPQRSTUVWXYZ have a blue background
StyleRange style3 = new StyleRange();
style3.start = 25;
style3.length = 13;
style3.background = display.getSystemColor(SWT.COLOR_BLUE);
text.setStyleRange(style3);
Button button = new Button(shell, SWT.PUSH);
button.setText("insert!");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
for (int i = 0; i < 10; i++) {
text.insert("Update ! " + i + "\n");
}
}
});
}
}
package styledtext;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.DeviceData;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Instructions on how to use the Sleak tool with a standlaone SWT example:
*
* Modify the main method below to launch your application.
* Run Sleak.
*
*/
public class Sleak {
Display display;
Shell shell;
List list;
Canvas canvas;
Button start, stop, check;
Text text;
Label label;
Object [] oldObjects = new Object [0];
Error [] oldErrors = new Error [0];
Object [] objects = new Object [0];
Error [] errors = new Error [0];
public static void main (String [] args) {
DeviceData data = new DeviceData();
data.tracking = true;
Display display = new Display (data);
Sleak sleak = new Sleak ();
sleak.open ();
while (!sleak.shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public void open () {
display = Display.getCurrent ();
shell = new Shell (display);
shell.setText ("S-Leak");
list = new List (shell, SWT.BORDER | SWT.V_SCROLL);
list.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
refreshObject ();
}
});
text = new Text (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
canvas = new Canvas (shell, SWT.BORDER);
canvas.addListener (SWT.Paint, new Listener () {
public void handleEvent (Event event) {
paintCanvas (event);
}
});
check = new Button (shell, SWT.CHECK);
check.setText ("Stack");
check.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event e) {
toggleStackTrace ();
}
});
start = new Button (shell, SWT.PUSH);
start.setText ("Snap");
start.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
refreshAll ();
}
});
stop = new Button (shell, SWT.PUSH);
stop.setText ("Diff");
stop.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
refreshDifference ();
}
});
label = new Label (shell, SWT.BORDER);
label.setText ("0 object(s)");
shell.addListener (SWT.Resize, new Listener () {
public void handleEvent (Event e) {
layout ();
}
});
check.setSelection (false);
text.setVisible (false);
Point size = shell.getSize ();
shell.setSize (size.x / 2, size.y / 2);
shell.open();
}
void refreshLabel () {
int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0, regions = 0;
for (int i=0; i
Подробнее здесь: [url]https://stackoverflow.com/questions/78297061/swt-new-textlayout-created-each-time-text-is-added-in-styledtext[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия