魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
查看: 3261|回复: 5

尝试复活论坛魔方java( applet)(Java2Script路线放弃) [复制链接]

Rank: 2

积分
301
帖子
209
精华
0
UID
1329505

四年元老 六年元老 八年元老

发表于 2022-2-24 13:50:05 来自手机 |显示全部楼层
本帖最后由 怀表 于 2022-5-13 13:48 编辑

正四面体切割群正方体(888-666-999)

正四面体切割群正方体(888-666-999)

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

Cubie-fs8.png

我拿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
已有 1 人评分经验 收起 理由
cube_master + 20 赞一个!

总评分: 经验 + 20   查看全部评分

Rank: 2

积分
301
帖子
209
精华
0
UID
1329505

四年元老 六年元老 八年元老

发表于 2022-2-26 14:16:39 |显示全部楼层
本帖最后由 怀表 于 2022-3-29 23:12 编辑

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

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

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

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

解决按键问题(与网页焦点有关)可能需要修改界面。如果急着测试,可以在页面中加入以下代码:
  1. <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代码块注释掉。就像这样:
  1. /*
  2. try{
  3.   //其它代码
  4.   Thread.sleep(20L);
  5.   //其它代码
  6. }
  7. catch(InterruptedException interruptedException) {

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

使用道具 举报

Rank: 2

积分
301
帖子
209
精华
0
UID
1329505

四年元老 六年元老 八年元老

发表于 2022-3-6 10:51:20 |显示全部楼层
本帖最后由 怀表 于 2022-3-6 11:35 编辑

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

使用道具 举报

Rank: 8Rank: 8

积分
18018
帖子
16457
精华
9
UID
449
性别

魔方理论探索者 论坛建设奖 爱心大使 十年元老

发表于 2022-3-13 18:30:39 |显示全部楼层
本论坛以前发java动图用的是java助手给出的html代码(<applet code……),后来论坛改版后用的是java助手给出的Discuz!代码。
本帖题目说是“复活论坛魔方java( applet)”,意思是不是说,在本论坛发java动图可以仍旧用html代码,或用修改过的html代码?
比如,下面的java动图如何改成html代码发上来呢?









使用道具 举报

Rank: 2

积分
301
帖子
209
精华
0
UID
1329505

四年元老 六年元老 八年元老

发表于 2022-3-27 09:55:55 |显示全部楼层
本帖最后由 怀表 于 2022-3-27 09:58 编辑
乌木 发表于 2022-3-13 18:30
本论坛以前发java动图用的是java助手给出的html代码(


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

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

使用道具 举报

Rank: 2

积分
301
帖子
209
精华
0
UID
1329505

四年元老 六年元老 八年元老

发表于 2022-5-13 16:16:12 |显示全部楼层
由于文件大小和性能问题,Java2Script并不适合要嵌到帖子里的java applet,这条路线被放弃了。想试一下的可以下载附件。

octa.001.zip (302.73 KB, 下载次数: 3)
octa.002.zip (197.17 KB, 下载次数: 3)

我权限不够,只能分卷了。请把"octa.001.zip"重命名为"octa.zip.001",把"octa.002.zip"重命名为"octa.zip.002"。解压之后,运行“miniweb.bat”,在浏览器里打开http://localhost:8080/hubo_Octa_OctaPlay_applet.html

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-4-18 23:19

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部