怀表 发表于 2022-2-24 13:50:05

尝试复活论坛魔方java( applet)(Java2Script路线放弃)

本帖最后由 怀表 于 2022-5-13 13:48 编辑


Java2Script是一个transpiler,提供java到javascript翻译功能,据说已经接近完全实现 "Java Virtual Machine with AWT and Swing in JavaScript"。也就是说,如果代码满足一定的要求,同一份代码既可以编译成jvm字节码,也可以转换成javascript在不允许运行java applet的浏览器运行(关于java2script的限制,请看链接2)


我拿Jaap Scherphuis开发的Cubie试了一下,好像可以。转动没问题,但是只能求解耗时不长的状态,因为持续执行太久会导致页面无响应。javascript不使用worker,长时间计算就会这样,没办法。(源码在链接4)

我把输出的文件和SwingJs打包到一起了,见链接5。(需要启动一个http服务器,直接通过file URL打开是不能运行的)
解压出来有三十多MB,但是实际上不会加载这么多,SwingJs是按需加载的。

我又下载了十二轴正方体变形魔方Java助手,尝试转换。结果发现有用到Thread.wait()  Thread.notify()  Thread.sleep() ,需要修改代码。README里说可以用javax.Swing.Timer改写,我正在想…… run()方法看起来很复杂。

链接
1、https://github.com/java2script/java2script
2、https://github.com/BobHanson/java2script/blob/master/sources/net.sf.j2s.core/dist/swingjs/differences.txt
3、https://www.jaapsch.net/puzzles/
4、https://www.jaapsch.net/puzzles/java/cubie/cubiesrc.zip
Written by Jaap Scherphuis
© 2003, 2004, 2018.
The program may be freely used or adapted for use on any other website provided that the copyright message remains intact and a link is included to Jaap's Puzzle Page. The program may not be sold.
5、https://disk.yandex.ru/d/SAggGAn7kehYww
6、https://github.com/java2script/java2script/blob/master/sources/net.sf.j2s.java.core/dist/SwingJS-site.zip
7、https://github.com/java2script/java2script/blob/master/sources/net.sf.j2s.core/dist/swingjs/net.sf.j2s.core-j11.jar
Eclipse插件,要放到Eclipse的dropins目录。
8、https://github.com/java2script/java2script/blob/master/sources/net.sf.j2s.core/dist/swingjs/net.sf.j2s.core.jar
Eclipse插件
9、https://github.com/java2script/java2script/tree/master/sources/net.sf.j2s.core/dist

怀表 发表于 2022-2-26 14:16:39

本帖最后由 怀表 于 2022-3-29 23:12 编辑

占一楼,记录点东西。
在不调试的情况下,参数不应该加core:"NONE" ,加上会启动很慢。

发现rubikmaster开发的applet也用了Thread.sleep,先搁置,继续读胡波的代码。

jaap的也用了Thread.sleep,我之前没注意。

本来想把run()方法拆成几段,放到switch块下面,隔一段时间执行一下,看了一下要拆开的地方太多了,放弃。

解决按键问题(与网页焦点有关)可能需要修改界面。如果急着测试,可以在页面中加入以下代码:<button onclick="document.querySelector('.ui-events').focus()">按键功能临时修复</button>点击按钮之后,按一下F1再按一下F2。
https://www.bilibili.com/video/BV1dq4y1v7Wq/

getGraphics().getFontMetrics().getHeight() 会返回null ,原因不明。这个问题不大,可以写成定值或传个参数用getParameter获取。(似乎是因为调用getGraphics()时界面还没显示出来)

有一个简单的修改方法,只要修改四处,就能达到勉强能玩的程度。(播放动画功能会废掉,点击转动也没有过渡动画)
把两处有Thread.sleep()的try-catch代码块注释掉。就像这样:/*
try{
  //其它代码
  Thread.sleep(20L);
  //其它代码
}
catch(InterruptedException interruptedException) {

}*/
然后把run()方法里面注释掉:
  @Override
  public void run() {
  /*
    原先的代码
  */
  }
搜索"getGraphics().getFontMetrics().getHeight()",那行修改成这样
this.textHeight = 20; //你要修改成其它值也行,启动的时候要自己调整一下applet的长宽比。
然后用Java2Script转换。在这种情况下,建议将Speed调为3,因为帧之间没有间隔了,看不到过渡动画,没必要绘制那么多帧。
才发现这个方法对有些魔方无效。

怀表 发表于 2022-3-6 10:51:20

本帖最后由 怀表 于 2022-3-6 11:35 编辑

:'( run()方法还是没改好。算了,先放个转动的视频吧。
https://www.bilibili.com/video/BV1xU4y1f7eB/

乌木 发表于 2022-3-13 18:30:39

本论坛以前发java动图用的是java助手给出的html代码(<applet code……),后来论坛改版后用的是java助手给出的Discuz!代码。
本帖题目说是“复活论坛魔方java( applet)”,意思是不是说,在本论坛发java动图可以仍旧用html代码,或用修改过的html代码?
比如,下面的java动图如何改成html代码发上来呢?

3
3
3
10
2U;2R';2U';2R;
99d658
f3a0e2

怀表 发表于 2022-3-27 09:55:55

本帖最后由 怀表 于 2022-3-27 09:58 编辑

乌木 发表于 2022-3-13 18:30 static/image/common/back.gif
本论坛以前发java动图用的是java助手给出的html代码(

我录了一个用正四面体切割群魔方动画演示软件模拟三阶的视频。
https://m.bilibili.com/video/BV1Ci4y1k7Qm

部分js代码我粘贴在这里,当然这些代码在论坛是不起作用的。Info={
code:"hubo.SMTQMF.SMTQMFPlay",
main:null,
width:'400',
height:'500',
serverURL:'https://chemapps.stolaf.edu/jmol/jsmol/php/jsmol.php',//这是另外一个项目jmol用到的,我们不需要
j2sPath:'swingjs/j2s',
console:'sysoutdiv',//删掉也可以
allowjavascript:true,
Type:'113',
Speed:'10',
Order:'0',
Leng:'666'
butbgcolor:'99d658',
bgcolor:'f3a0e2',
script:"L;D;L';D2;B';R';U;B;D;F;U;B';L';U;B;U2;"
}
SwingJS.getApplet('SMTQMF',Info)//启动Applet对照代码<applet code=SMTQMFPlay archive='SMTQMFPlay.jar' codebase='other/' width=400 height=500>
<param name=Type value=113>
<paran name=Speed value=10>
<param name=Order value=0>
<param name=Leng value=666>
<param name=butbgcolor value='99d658'>
<param name=bgcolor value='f3a0e2'>
<param name=script value="L;D;L';D2;B';R';U;B;D;F;U;B';L';U;B;U2;">
</applet>

怀表 发表于 2022-5-13 16:16:12

由于文件大小和性能问题,Java2Script并不适合要嵌到帖子里的java applet,这条路线被放弃了。想试一下的可以下载附件。




我权限不够,只能分卷了。请把"octa.001.zip"重命名为"octa.zip.001",把"octa.002.zip"重命名为"octa.zip.002"。解压之后,运行“miniweb.bat”,在浏览器里打开http://localhost:8080/hubo_Octa_OctaPlay_applet.html
页: [1]
查看完整版本: 尝试复活论坛魔方java( applet)(Java2Script路线放弃)