我正在尝试使用Java Swing构建一个简单,轻量级且响应迅速的应用程序.但是,当它启动时,在窗口(JFrame)出现之前会有明显的延迟(> 500ms).
我已经将它跟踪到java.awt.Window类的构造函数,该类是JFrame的祖先.
奇怪的是,构造函数只对第一次调用很慢.如果我创建多个对象的JFrame,在构造所花费的时间是〜用于第一对象600毫秒,但通常为0毫秒为后续对象测量.
这是一个简单的例子,在我的系统中,它显示了第一个构造函数调用的显着延迟,但不是第二个:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
long start;
start = System.currentTimeMillis();
JFrame frame1 = new JFrame();
System.out.println((System.currentTimeMillis() - start) + " for first JFrame.");
start = System.currentTimeMillis();
JFrame frame2 = new JFrame();
System.out.println((System.currentTimeMillis() - start) + " for second JFrame.");
}
});
}
Run Code Online (Sandbox Code Playgroud)
具有典型输出:
641 for first JFrame.
0 for second JFrame.
Run Code Online (Sandbox Code Playgroud)
如果我在JFrame对象之前添加此Window对象初始化:
java.awt.Window window = new java.awt.Window(null);
Run Code Online (Sandbox Code Playgroud)
然后输出变为如下:
578 for first Window.
47 for first JFrame. …Run Code Online (Sandbox Code Playgroud) 我需要一种简单的方法来呈现使用Requests(python-requests.org)检索的HTML页面.我在Windows上使用Python 3.2.
我使用的是tkinter,我发现了一个名为TkHtml的Tk小部件.它在http://tkhtml.tcl.tk/中描述,DLL可从http://www.hwaci.com/sw/tkhtml/下载.我在http://tix.sourceforge.net/Tixapps/src/Python/TkHtml.py找到了一个python包装器.
我不知道如何让TkHtml在python中运行.是否有一些处理第三方Tk小部件的标准方法?
我把tkhtml.dll放在Python32\DLLs中(不知道这是不对的)并将TkHtml.py放在Python32\Lib\site-packages中.我继续修复TkHtml.py中的导入以使用Python 3(将tkFileDialog更改为tkinter.filedialog,将Tkinter更改为tkinter).
当我做:
import TkHtml
app=TkHtml.TestApp()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
...
File "C:\Program Files\Python32\lib\site-packages\TkHtml.py", line 45, in __init__
master.tk.call("package", "require", "tkhtml")
_tkinter.TclError: can't find package tkhtml
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
如何在JTextPane中实现自动换行?
我试图准确理解它是如何工作的,以便我可以修改行为.现在,如果我在JScrollPane中有一个标准的JTextPane,它会在空格处中断文本,但不会在长单词内部 - 如果有一个文本字符串没有比窗口宽的空格,它将不会换行/中断将出现一个水平滚动条.随着文本宽度的增加,ParagraphView的宽度(通过getWidth())会增加以保存文本.
Lapitsky的这篇文章说LabelView.getBreakWeight()返回带有空格的标签的View.ExcellentBreakWeight和没有空格的标签的View.GoodBreakWeight(GlyphView.java中的代码似乎证实了这一点),为什么它不会破坏?它是以某种方式返回BadBreakWeight而不是GoodBreakWeight?还是有一些布局问题?还是有错误?
这是一些代码(为了您的观看乐趣):
//somewhere inside JPanel or JFrame constructor
JTextPane textPane = new JTextPane();
JScrollPane scrollPane = new JScrollPane(textPane);
add(scrollPane);
Run Code Online (Sandbox Code Playgroud)
请注意,如果我取出滚动窗格并仅使用文本窗格(它只是在窗口外面时被剪切),它仍然不会换行.
Swing的javadoc似乎没有详细介绍一些对象(如JTextPane,View和相关对象)如何协同工作.是否还有关于此类课程设计的进一步文档,或许详细说明了每个课程的目的以及它们如何一起工作?它不公开吗?(或者我是唯一一个在这样的事情上遇到麻烦的人?或者说文档不足以限制一些典型的开发人员不会处理的事情?)