A. java SWT 加载文件内容
楼主,你的代码好多错误。帮你改了部分,主要还是看“ //这里应该怎么写代码”下面的代码。java处理文件需要流的知识。我这里用的Scanner需要jdk1.5以上版本才能用。你先运行看看吧
package com.swtjface;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class Test {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setSize(500, 375);
final Button button = new Button(shell, SWT.PUSH);
button.setBounds(0, 0, 150, 35);
button.setText("打开文件");
final Text text = new Text(shell, SWT.BORDER|SWT.MULTI);
text.setBounds(0, 40, 500, 375);
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 这里应该怎么写代码
FileDialog dlg = new FileDialog(shell, SWT.OPEN);
dlg.setText("选择一个TXT文件");
dlg.setFilterExtensions(new String[] { "*.txt" });
dlg.setFilterNames(new String[] { "文本文件(*.txt)" });
String filePath = dlg.open();
System.out.println(filePath);
try {
Scanner in = new Scanner(new FileInputStream(new File(
filePath)));
while (in.hasNextLine()) {
text.append(in.nextLine() + "\r\n");
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
B. java swing 或者java SWT 如何播放视频
那是因为你的可是大了,使用jmf时播放的不能太大,为320*240MJPEG PCM的大小
C. 用java SWT做迅雷项目时线程老卡死怎么办求具体实例
swt执行线程
SWT中的多线程机制和awt/swing中有些不同,这个大家应该都知道,不过还是要说下,Display对象中负责调用其他线程的方法有以下3种:● asyncExec(Runnable runnable):异步启动新的线程。所谓异步就是,UI线程不会等待runnable对象执行结束后再继续进行,就是说UI线程可以和runnable对象所在的线程同时运行。● syncExec(Runnable runnable):同步启动新的线程。所谓同步就是,UI线程会等待runnable对象执行结束后才会继续进行,当runnable对象是耗时大的线程时,尽量不要采用此种方式。另外,对于该种方式创建的线程可通过getSyncThread()方法获得线程对象。● timerExec(int milliseconds,Runnable runnable):指定一段时间再启动新的线程。用此方法创建的线程,将会在指定的时间后再启动线程。当然用此方法创建的线程启动后,与UI线程是异步的。如果指定的时间为负数,将不会按时启动线程。另外Display对象中,与UI线程相关的方法如下所示:● 获得当前的UI线程对象的方法:getThread(),返回Thread对象。● 使UI线程处于休眠状态:sleep()。● 唤醒UI线程:wake()。上面几点都是书里面的原话,不做阐述了.下面我要说的是一个写法的问题,不能小瞧啊,后果很严重.如果有一个线程他要做的事需要很久比如5分钟,像我这样的初学swt的人一定是new了一个线程然后getDisplay().asyncExec(线程对象); 结果虽然执行成功,但是界面确处于挂起状态(假死),直到执行结束,不过要说的是的确是异步执行的,还是ui却不知道为什么停止用户响应,原理暂时先不去理了,swt源码太复杂了.这里面就要引出一个问题为什么不 像下面这么写呢?Thread thread = new Thread(线程对象);
thread.start();
因为swt中非UI线程中调用窗口控件如果不像上面三种写法那样写的话,会抛org.eclipse.swt.SWTException: Invalid thread access这个异常在swt中程序启动时只有一个主线程,在这里与awt和swing是不一样的,它不允许其他线程访问UI主线程中的部件,具读过swt源码的人说AsyncExec方法根本就没有新启动一个线程而是由Synchronizer调用其中的 run 方法而已.如果是这样的话,也就难怪UI会挂起.解决这个问题的一个比较好的方法是如果要异步执行的线程所做的工作非常少的话,就无所谓了,如果异步线程需要执行很长时间的话,应该像下面这样启动线程Thread thread = new Thread(线程对象);
thread.start();在线程对象里面所有调用到UI部件的地方classFinder.getGui().getDisplay().syncExec(new Runnable() {
public void run() {
//do run
}
});历经几个小时问题终于解决了这里做个总结吧.我对swt多线程的评价swt的syncExec ,asyncExec 以及timerExec都是伪线程执行方法,把它看成特别的Synchronizer调用就可以了,syncExec ,asyncExec 以及timerExec执行的线程要做的事只是改变UI部件的属性而已执行时间不能太长.此外的其他操作仍然由传统的线程来做.这里要特别注意,swt执行线程只用于在传统线程中操作ui组建在这里要感谢内部类,否则一个复杂的swt线程不知道要写多少个为swt部件服务的标准类
D. java swt开发发展前景
SWT 主要用来开发Eclipse 及其插件的。你去eclipse market瞧一瞧那些海量的插件,就知道前景有多大了,不过在国内,插件开发需求还是比较少的。
E. java swt 实现界面的伸缩。
加一个pack();
F. java swt问题,底分20,每答对一题加分20.........
awt还是swt?
swt是另一个UI库,与swing不同,你现在用的是swing...
1 swing直接实现半透明不方便,因为无法获得底层窗口的句柄,或者你得通过本地方法实现。另外有一种模拟半透明的方式,就是屏幕截图进行背景绘制..
2 不知你问的啥
3 图片的分辨率刚好填满窗口?你是指像素还是?分辨率是图像是否清晰的指标!
你是想拉伸图片还是不拉伸图片?拉伸图片有几种模式可以拉伸,有的丢失像素比较严重但速度快,有的相反..
4 用多线程解决,直接可以使用Timer
new Timer(1000, new ActionListener(){
public void actionPerformed(ActionEvent e){
button.setText(...) //每1秒更换文本
}
}).start();
补充:1 无论是外部类还是内部类,只要其实现了listener接口就可以实现监听,在代码中找到按钮添加监听器的代码段形如:button.addActionListener(...)
将其替换为自己写的外部类:
class A implements ActionListener{
...}
button.addActionListener(new A())即可。
2 tabbedPane隐藏标签,难道你不是通过点击标签来切换而是用另外的按钮来实现?不知你为何要这样做..不过用另外的按钮来切换的话只需要在按钮监听处理的地方加上: tabbedPane.setSelectedIndex(int index) 应该就可以了
G. 如何在eclipse中查看SWT源码
使用Eclipse开发Java程序,有时候需要查看一下某个类的源码,这时我们可以这样做,
鼠标放到你要查询的类名上,按住Ctrl键+鼠标左键就可以了!
如果发现出现错误---查不到源码,那么此时还需要设置一下,把JDK安装目录下的src.zip配置一下,此文件就是Java类库的源码。
以JDK1.8为例,查看一下src.zip文件
如果发现找不到源代码,则进行设置
点击Attach Source按钮,弹出视图,把JDK下的src.zip文件传入点击OK即可
此时按住Ctrl+鼠标左键指向Java类库当中的类,就可以查看类的源代码
H. JAVA用SWT写时钟代码
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define BUF_SIZE 80
int main()
{
time_t t;
struct tm *tm;
char s[BUF_SIZE];
if(time(&t) == ((time_t)-1)) return 1;
tm = localtime(&t);
if(!tm) return 1;
strftime(s, sizeof(s), ":%H:%M:%S", tm);
printf("%s\n", s);
system("pause");
return 0;
}
I. java中的SWT
挽尊
J. 有谁知道怎么在Eclipse中看到SWT的源代码。我把SWT的包导到了项目下还是看不到,求救啊!!!
SWT包在普通项目下可能看不到,你新建一个插件项目,再导入试试