socket只是一个协议,简历连接以后,一端把流发出去,另一端的接收端口就会收到,所以你知道简单学习一下socket怎么发送就可以了,而且你这个项目不需要多线程,所以不会有大问题
专注于为中小企业提供成都做网站、网站设计、外贸营销网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业江川免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
importjavax.swing.*;\x0d\x0aimportjava.awt.*;\x0d\x0aimportjava.awt.event.*;\x0d\x0apublicclasslianliankanimplementsActionListener\x0d\x0a{\x0d\x0aJFramemainFrame;//主面板\x0d\x0aContainerthisContainer;\x0d\x0aJPanelcenterPanel,southPanel,northPanel;//子面板\x0d\x0aJButtondiamondsButton[][]=newJButton[6][5];//游戏按钮数组\x0d\x0aJButtonexitButton,resetButton,newlyButton;//退出,重列,重新开始按钮\x0d\x0aJLabelfractionLable=newJLabel("0");//分数标签\x0d\x0aJButtonfirstButton,secondButton;//分别记录两次被选中的按钮\x0d\x0aintgrid[][]=newint[8][7];//储存游戏按钮位置\x0d\x0astaticbooleanpressInformation=false;//判断是否有按钮被选中\x0d\x0aintx0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标\x0d\x0ainti,j,k,n;//消除方法控制\x0d\x0apublicvoidinit(){\x0d\x0amainFrame=newJFrame("JKJ连连看");\x0d\x0athisContainer=mainFrame.getContentPane();\x0d\x0athisContainer.setLayout(newBorderLayout());\x0d\x0acenterPanel=newJPanel();\x0d\x0asouthPanel=newJPanel();\x0d\x0anorthPanel=newJPanel();\x0d\x0athisContainer.add(centerPanel,"Center");\x0d\x0athisContainer.add(southPanel,"South");\x0d\x0athisContainer.add(northPanel,"North");\x0d\x0acenterPanel.setLayout(newGridLayout(6,5));\x0d\x0afor(intcols=0;cols=0){\x0d\x0acols=(int)(Math.random()*6+1);\x0d\x0arows=(int)(Math.random()*5+1);\x0d\x0awhile(grid[cols][rows]!=0){\x0d\x0acols=(int)(Math.random()*6+1);\x0d\x0arows=(int)(Math.random()*5+1);\x0d\x0a}\x0d\x0athis.grid[cols][rows]=save[n];\x0d\x0an--;\x0d\x0a}\x0d\x0amainFrame.setVisible(false);\x0d\x0apressInformation=false;//这里一定要将按钮点击信息归为初始\x0d\x0ainit();\x0d\x0afor(inti=0;ij){//如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边\x0d\x0afor(i=y-1;i=j;i--){//判断第二按钮左侧直到第一按钮中间有没有按钮\x0d\x0aif(grid[x][i]!=0){\x0d\x0ak=0;\x0d\x0abreak;\x0d\x0a}\x0d\x0aelse//K=1说明通过了第一次验证\x0d\x0a}\x0d\x0aif(k==1){\x0d\x0alinePassOne();\x0d\x0a}\x0d\x0a}\x0d\x0aif(yx){\x0d\x0afor(n=x0;n=x+1;n--){\x0d\x0aif(grid[n][j]!=0){\x0d\x0ak=0;\x0d\x0abreak;\x0d\x0a}\x0d\x0aif(grid[n][j]==0n==x+1){\x0d\x0aremove();\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0afor(i=0;ii){\x0d\x0afor(j=x-1;j=i;j--){\x0d\x0aif(grid[j][y]!=0){\x0d\x0ak=0;\x0d\x0abreak;\x0d\x0a}\x0d\x0aelse\x0d\x0a}\x0d\x0aif(k==1){\x0d\x0arowPassOne();\x0d\x0a}\x0d\x0a}\x0d\x0aif(xy){\x0d\x0afor(n=y0;n=y+1;n--){\x0d\x0aif(grid[i][n]!=0){\x0d\x0ak=0;\x0d\x0abreak;\x0d\x0a}\x0d\x0aif(grid[i][n]==0n==y+1){\x0d\x0aremove();\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0apublicvoidlinePassOne(){\x0d\x0aif(y0j){//第一按钮同行空按钮在左边\x0d\x0afor(i=y0-1;i=j;i--){//判断第一按钮同左侧空按钮之间有没按钮\x0d\x0aif(grid[x0][i]!=0){\x0d\x0ak=0;\x0d\x0abreak;\x0d\x0a}\x0d\x0aelse//K=2说明通过了第二次验证\x0d\x0a}\x0d\x0a}\x0d\x0aif(y0i){\x0d\x0afor(j=x0-1;j=i;j--){\x0d\x0aif(grid[j][y0]!=0){\x0d\x0ak=0;\x0d\x0abreak;\x0d\x0a}\x0d\x0aelse\x0d\x0a}\x0d\x0a}\x0d\x0aif(x0
回答于 2022-12-14
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class JMFMediaPlayer extends JFrame implements ActionListener,
ControllerListener, ItemListener {
// JMF的播放器
Player player;
// 播放器的视频组件和控制组件
Component vedioComponent;
Component controlComponent;
// 标示是否是第一次打开播放器
boolean first = true;
// 标示是否需要循环
boolean loop = false;
// 文件当前目录
String currentDirectory;
// 构造方法
public JMFMediaPlayer(String title) {
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
// 用户点击窗口系统菜单的关闭按钮
// 调用dispose以执行windowClosed
dispose();
}
public void windowClosed(WindowEvent e){
if (player != null){
// 关闭JMF播放器对象
player.close();
}
System.exit(0);
}
});
// 创建播放器的菜单
JMenu fileMenu = new JMenu("文件");
JMenuItem openMemuItem = new JMenuItem("打开");
openMemuItem.addActionListener(this);
fileMenu.add(openMemuItem);
// 添加一个分割条
fileMenu.addSeparator();
// 创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
loopMenuItem.addItemListener(this);
fileMenu.add(loopMenuItem);
fileMenu.addSeparator();
JMenuItem exitMemuItem = new JMenuItem("退出");
exitMemuItem.addActionListener(this);
fileMenu.add(exitMemuItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
this.setJMenuBar(menuBar);
this.setSize(200, 200);
try {
// 设置界面的外观,为系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
this.setVisible(true);
}
/**
* 实现了ActionListener接口,处理组件的活动事件
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
// 调用dispose以便执行windowClosed
dispose();
return;
}
FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
fileDialog.setDirectory(currentDirectory);
fileDialog.setVisible(true);
// 如果用户放弃选择文件,则返回
if (fileDialog.getFile() == null){
return;
}
currentDirectory = fileDialog.getDirectory();
if (player != null){
// 关闭已经存在JMF播放器对象
player.close();
}
try {
// 创建一个打开选择文件的播放器
player = Manager.createPlayer(new MediaLocator("file:"
+ fileDialog.getDirectory() + fileDialog.getFile()));
} catch (java.io.IOException e2) {
System.out.println(e2);
return;
} catch (NoPlayerException e2) {
System.out.println("不能找到播放器.");
return;
}
if (player == null) {
System.out.println("无法创建播放器.");
return;
}
first = false;
this.setTitle(fileDialog.getFile());
// 播放器的控制事件处理
player.addControllerListener(this);
// 预读文件内容
player.prefetch();
}
/**
* 实现ControllerListener接口的方法,处理播放器的控制事件
*/
public void controllerUpdate(ControllerEvent e) {
// 调用player.close()时ControllerClosedEvent事件出现。
// 如果存在视觉部件,则该部件应该拆除(为一致起见,
// 我们对控制面板部件也执行同样的操作)
if (e instanceof ControllerClosedEvent) {
if (vedioComponent != null) {
this.getContentPane().remove(vedioComponent);
this.vedioComponent = null;
}
if (controlComponent != null) {
this.getContentPane().remove(controlComponent);
this.controlComponent = null;
}
return;
}
// 如果是媒体文件到达尾部事件
if (e instanceof EndOfMediaEvent) {
if (loop) {
// 如果允许循环,则重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
return;
}
// 如果是播放器预读事件
if (e instanceof PrefetchCompleteEvent) {
// 启动播放器
player.start();
return;
}
// 如果是文件打开完全事件,则显示视频组件和控制器组件
if (e instanceof RealizeCompleteEvent) {
vedioComponent = player.getVisualComponent();
if (vedioComponent != null){
this.getContentPane().add(vedioComponent);
}
controlComponent = player.getControlPanelComponent();
if (controlComponent != null){
this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
}
this.pack();
}
}
// 处理“循环”复选框菜单项的点击事件
public void itemStateChanged(ItemEvent e) {
loop = !loop;
}
public static void main(String[] args){
new JMFMediaPlayer("JMF媒体播放器");
}
}
试试吧,我这里运行正常
那个是这样的,你所想要做的应该是applet吧。
applet倒是可以的,需要做一个applet的程序,编译生成class文件。
然后写一个html用一个特定的标签去调用这个class,具体是哪个标签你就上网查一下呗。
不过你这个是用swing作的,这个就不知道需要怎么搞了,么搞过。。。。